java 字符串学习

字符串是对象

声明和初始化

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:适用多线程下在字符缓冲区进行大量操作的情况

猜你喜欢

转载自www.cnblogs.com/Johnny-yu/p/11289888.html