Java笔记-字符串相关

1. String对象是不可改变的

  String对象是不可改变的,换句话说就是String对象是“只读”的。任何修改String对象的方法,最终会创建一个新的对象。

2. StringBuffer类和StringBuilder类

  由于String对象不可改变,所以频繁地修改字符串(比如频繁使用concat()方法),会产生大量需要垃圾回收的对象,要避免这个情况就需要使用StringBuffer类或StringBuilder类。这两个类的对象可以被修改而不产生新的对象,StringBuilder类速度较快,通常情况下使用这个类,而在需求线程安全(详见《Java编程思想》的21章)的情况下,StringBuffer类是更好的选择。

  此外,在《Java编程思想》13.2节中提到,使用操作符“+”和“+=”时,编译器会为你自动优化(使用StringBuilder类)。换句话说,s1 = "String1" + "Strng2" + "String3"或者s2 += "String1"这样的操作不会影响效率。所以字符串操作比较简单的情况下,可以直接使用操作符操作,编译器会自动优化,但是复杂的操作还是自己创建StringBuilder对象比较好。

  关于StringBuilder类:

构造方法 StringBuilder(int capacity) // 空的,有具体容量
StringBuilder(String str)
插入 insert(int index, char x) // 在指定位置插入字符
末尾追加 append();
返回长度 length();
修改字符 setCharAt(int index, char ch)
转成String toString()
反转字符串 reverse()
删除 delete(int start, int end) // 删除从start开始,到end-1的所有字符
替换 replace(int start, int end, String str) // 替换从start开始,到end-1的所有字符

 

 

 

 

 

 

 

 

 

 

 

3. 格式化输出

  System.out.printf()和System.out.format()可以像c那样格式化打印出字符串。

  要想格式化创建字符串有两种方法,使用java.util.Formatter类和String类的静态方法String.format()。其中String.format()内部也使用了Formatter类,但使用String.format()更加便捷直观。

4. String类的常用方法

  1)求字符串长度

String s = "abc";
int length = s.length();

  2)比较两个字符串是否相同

String s1 = "abc";
String s2 = "avc";
boolean x = s1.equals(s2); // 严格大小写
boolean y = s2.equalsIgnoreCase(s1); // 忽略大小写

  3)连接两个字符串

String s1 = "ab";
String s2 = "cd";
String s3 = s1 + s2; // "abcd"
String s4 = concat(s2); // "abcd

  4)索引和搜索

String s = "abcdefg"; 
char a = s.charAT(1); // 返回第二个字符:b
int x = s.indexOf('a'); // 返回第一个‘a’的位置:0
int y = s.indexOf('cd'): // 返回第一个字符串‘cd’的起始位置:2
int x1 = s.lastIndexOf('e'); // 返回最后一个'e'的位置:4
String s1 = s.subString(3); // 返回从第四个字符开始的子串:defg
String s2 = s.subString(1, 3); // 返回2-4位字符组成的子串:bcd
String s3 = s.replace(a, z); // 将字符串中的a都替换成z
// 去空格
String str = "a b b";
String strWithoutSpace1 = str.replace(" ", "");
String strWithoutSpace2 = str.replace(' ', '\0')

 

posted @ 2020-07-11 21:29  叶落未落  阅读(214)  评论(0)    收藏  举报