字符串是对象
声明和初始化
1 String str = "abc"; 2 String str = new String("abc"); 3 char[] a = {'a', 'b', 'c'}; 4 String str = new String(a); 5 String str = new String(a,0,1);
字符串连接:用“+”符号,其他数据类型会自动调用toString方法,转换成字符串进行连接
获取字符串长度:
str.length();
字符串查找
1 String s = "add"; 2 s.indexOf("d");//指定字符串首次出现的索引,返回1,参数为空字符串返回0 3 s.lastIndexOf("d")//指定字符串最后一次出现的索引,返回2,参数为空字符串返回字符串长度
获取指定索引的字符
s.charAt(1);//返回d
获取子字符串
1 s.substring(1);//返回dd,默认取到字符串结尾 2 s.substring(0, 3);//返回add 3 s.substring(0, 2);//返回ad,注意是取到结束索引前一位
去除空格
s.trim();//取出字符串首尾两端的空格,ps:其实它可以去除的不止空格,具体在查阅
字符串替换
1 s.replace("a", "A");//返回Add 2 s.replace("ad", "AD");//返回ADd 3 s.replaceAll("d", "hh");//返回ahhhh,即替换所有子串 4 s.replaceFirst("d", "hh");//返回ahhd,即替换第一个子串
判断字符串的开始和结尾是否是指定字符串
1 s.startsWith("ad");//返回true 2 s.startsWith("d");//返回false 3 s.startsWith("ad", 0);//返回true,判断指定索引处是否以指定字符串开始 4 s.endsWith("d");//返回true
判断字符串是否相等 --- == 判断字符串地址是否相同
1 s.equals("add");//true,如果两个空字符串比较,会返回true 2 s.equals("Add");//区分大小写 3 s.equalsIgnoreCase("ADd");//true,忽略大小写
按字典顺序比较字符串 --- 基于字符的Unicode值
1 s.compareTo("dad");//-3 2 s.compareTo("add");//0 3 s.compareTo("Add");//32 4 s.compareTo("ad");//1
大小写转换 --- 数字和非字符不影响
1 s.toUpperCase();//ADD 2 s.toLowerCase();//转换成小写字母
字符串分割
1 String s = "adadads"; 2 String[] a = s.split("d");//a a a s 3 String[] a = s.split("d",2);//a adads
格式化字符串 --- format(format, args);
例:
String formatted = String.format("%s今年%d岁。", "小李", 30); // "小李今年30岁。"
- 这个方法第一个参数是格式串,后面的参数都是格式串的参数,用于替换格式串中的占位符。
- 占位符以 "%x" 的形式表示,不同的参数类型要用不同的字母。
String.format()
返回值类型为字符串,也就是格式化的结果。
时间日期格式化 --- 参考
https://segmentfault.com/a/1190000013654676
字符串生成器 --- 解决“+”生成新的String对象,加大系统开销问题,生成器可以生成可变长度的字符序列,频繁附加字符串是建议使用
1 StringBuilder str = new StringBuilder("a"); 2 str.append("c");//字符串追加内容,返回ac--参数可以是任何类型 3 str.insert(0, true);//指定位置添加字符,返回trueac 4 str.delete(0, 2);//删除指定区域的字符串,返回ueac 5 str.deleteCharAt(2);//删除指定位置的字符串。返回treac
StringBuilder和StringBuffer 主要区别:在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况