1.这两种定义有什么区别

/***
* 面试题:这两种定义方式有什么区别?
* 如何证明?
* @param args
*/
public static void main(String[] args) {
String str = "hello";//常量池 String str1 = new String("hello");//在堆里开辟一块新的空间
}

2.String 常用方法

   public static void test(){
String str = "Hello World";//常量的特点是定义了,就不会变,除非重新赋值
int len = str.length();//字符串的长度
boolean eq = str.equals("33333");//判断两个字符的值是不是相等
char charStr = str.charAt(2);//将字符串转换为char类型 boolean contains = str.contains("hello");//判断字符串是否包含这个字符串
boolean startWith = str.startsWith("H");//判断字符串是否以这个字符串开始
boolean endWith = str.endsWith("ddd");//判断字符串是否以这个字符串结尾 boolean empty = str.isEmpty();//判断这个字符串是否为空的字符串,是"",不是null boolean eqIgnore = str.equalsIgnoreCase("HELLO WORLD");//不区分大小写的相等
//rep = Hello java; str = Hello World
//如果没有找到匹配的,则不做替换
String rep = str.replaceAll("World","java");//替换全部的
String rep1 = str.replace("H","e");//替换一个,传值的变量都是char
String rep2 = str.replace("He","eeeee");//替换一个,传值的变量都是char
System.out.println(rep);
System.out.println(str);
System.out.println(rep1);
System.out.println(rep2); String[] strs = str.split(" ");//分割,分割后是变成数组 String sub = str.substring(1,5);//截取,下标是从0开始,1--是开始下标,5--是截止下标
System.out.println(sub); String upStr = str.toUpperCase();//转大写
String lowStr = str.toLowerCase();//转小写
}

3.commons-lang3

dependencies {
compile('org.apache.commons:commons-lang3:3.10')
}

小练习

public class Demo6 {
//练习题:给定一个字符串,判断是否是一个回文(即正反都一样)
//abcdefggfedcba
public static void main(String[] args) {
test1();
} public static void test1(){
String str = "abcdefgfedcba";
String str1 = StringUtils.reverse(str);//将字符串反转
System.out.println("str1 = " + str1);
if (str.equals(str1)){
System.out.println("该字符串时一个回文");
}
}
}

4.StringBuilder和StringBuffer

StringBuffer多了一个synchronized 关键字,线程安全锁

StringBuilder是线程不安全的

StringBuffer是线程安全的

但是一般情况下是在一个方法下使用,使用StringBuilder多点

如果出现多线程调用时,再用StringBuffer

//StringBuilder 的定义
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
//StringBuffer的定义
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
public static void test1(){
String str = "a,b,c,d,e,f,g";
String[] arr = str.split(",");
String res = "";
//这种情况是在不断的创建对象
for (String key:arr){
res += key + "*";
}
System.out.println("res = " + res);
} public static void test2(){
String str = "a,b,c,d,e,f,g";
String[] arr = str.split(",");
//StringBuilder相当于一个容器,不断的往容器里加内容
StringBuilder res = new StringBuilder();
for (String key:arr){
res.append(key).append("*");
}
System.out.println("res = " + res);
} public static void test3(){
String str = "a,b,c,d,e,f,g";
String[] arr = str.split(",");
//StringBuffer多了一个synchronized 关键字,线程安全锁
StringBuffer res = new StringBuffer();
for (String key:arr){
res.append(key).append("*");
}
System.out.println("res = " + res);
}

 

Java003-String字符串的更多相关文章

  1. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  2. [CareerCup] 1.3 Permutation String 字符串的排列

    1.3 Given two strings, write a method to decide if one is a permutation of the other. 这道题给定我们两个字符串,让 ...

  3. 03-Java String字符串详解

    1.Java字符串String A.实例化String字符串:直接赋值(更合理一些,使用较多).使用关键字new. B.String内容的比较 // TODO Auto-generated metho ...

  4. C++学习38 string字符串的增删改查

    C++ 提供的 string 类包含了若干实用的成员函数,大大方便了字符串的增加.删除.更改.查询等操作. 插入字符串 insert() 函数可以在 string 字符串中指定的位置插入另一个字符串, ...

  5. C++学习37 string字符串的访问和拼接

    访问字符串中的字符 string 字符串也可以像字符串数组一样按照下标来访问其中的每一个字符.string 字符串的起始下标仍是从 0 开始.请看下面的代码: #include <iostrea ...

  6. java String字符串——进度1

    String字符串    在JAVA中提供了多种创建字符串对象的方法,这里介绍最简单的两种,    第一种是直接赋值,    第二种是使用String类的构造方法:    如下所示:    Strin ...

  7. 关于String字符串反转

    这是网上看到的一篇java面试题中的问题: 问题是: 如何将一个String字符串反转. String str = "1234567"; int length = str.leng ...

  8. JavaScript的内置对象(Date日期+string字符串)基础语法总结

    1.Date日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 1)定义一个时间对象 : var Udate=new Date(); //注意:使用关键字new,Date()的首 ...

  9. 【转】String字符串相加的问题

    String字符串相加的问题 前几天同事跟我说我之前写的代码中在操作字符串时候,使用字符串相加的方式而不是使用StringBuffer或者StringBuilder导致内存开销很大.这个问题一直在困扰 ...

  10. 从零开始学习前端JAVASCRIPT — 3、JavaScript基础string字符串介绍

    1:字符串 JS中的任何数据类型都可以当作对象来看.所以string既是基本数据类型,又是对象. 2:声明字符串 基本数据类型:var sStr = '字符串'; 对象的方法:var oStr = n ...

随机推荐

  1. 出现 关于UTF-8 序列的字节 2 无效的异常

    学习mybatis中碰到了 Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instanc ...

  2. 解决了一个java服务线程退出的问题

    问题背景 ​ 早上才上班,测试就提了一个问题:"昨天所有批量任务都没有跑".我看了一下任务监控页面,任务是有生成的,但却一直在等待调度状态.初步怀疑是我们的调度服务问题,于是上去查 ...

  3. 女朋友看了也懂的Kafka(上篇)

    @ 目录 前言:为什么需要Kafka 1.初识kafka 1.1 消息队列的好处: 1.2 消息队列的两种模式 没有消息队列我们怎么做? 传统MQ怎么做? 这时候,Kafka就"闪亮登场&q ...

  4. 单线程service服务

    1.@Service修饰类名,同时类继承Thread类 @Service public class MasterSchedulerService extends Thread { /** * logg ...

  5. Paddle Release Note

    Paddle Release Note 重要更新 飞桨paddle框架2.0.0版本有如下重要更新: 编程范式:默认开启动态图模式进行模型开发和训练,通过动转静的方式进行模型部署和训练加速.如果需要使 ...

  6. Redis与DB的数据一致性解决方案(史上最全)

    文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...

  7. Java代码优化:使用构造函数和使用一个个setter的效率差别

    在对Java代码进行优化的时候,想方设法的要提高整体的效率,使用JProfiler看代码的时间占比,然后,看看哪些部分是可以优化的,减少运行时间的.下面有这么几个方向. 1. 能使用构造函数一步到位的 ...

  8. 前台使用Vue

    前台搭建遇到问题 ----前台访问量大 未采用vue 单页面SAP 的方式构建 使用多HTML构建页面 项目构建 vue 2.6 https://cn.vuejs.org/ elementUI htt ...

  9. VBS脚本编程(2)——运算符

    算数运算符 用于执行数学计算的运算符. 1.加法运算符( + ) 计算两个数之和. 2.减法运算符( - ) 计算两个数值的差或表示数值表达式的负值. 3.乘法运算符(*) 计算两个数之积. 4.除法 ...

  10. JAVA设计模式(6:单例模式详解)

    单例模式作为一种创建型模式,在日常开发中用处极广,我们先来看一一段代码: // 构造函数 protected Calendar(TimeZone var1, Locale var2) { this.l ...