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')

浙公网安备 33010602011771号