1.String底层是由char[]实现的,是不可变的。看起来会改变String的方法,实际上都是创建了一个新的String对象,任何指向它的引用都不可能改变它本身的值。
2.通过 “+” 连接String字符串,实际上是编译器自动引入了StringBuilder类,通过append()方法实现的。
3.当为一个类编写toString()方法时,如果字符串操作比较简单,可以直接使用“+”,信赖编译器。 但是如果在方法中使用了循环时,最好自己创建一个StringBuilder对象,用它来手动构造最后的结果。 如果使用“+”,编译器会在循环的过程中不断的创建StringBuilder对象,影响效率的同时也会造成过多垃圾。虽然java存在自动回收机制,但是其从来不是实时的,只是在内存不够用时才回收,所以尽量产生少的垃圾也是必要的。
4.在toString()方法中,不要直接使用this,如使用 a = “b” + this + “c”这种语句,编译器无法识别this的时候,会调用this的toString()方法,此时就会陷入递归中。
5.Formatter()类能实现String字符串输出格式更精细的控制,当需要时可以参考使用此类。
6.String.format()方法,其实现原理也是内部创建Formatter对象,实现格式化。
7.熟练掌握正则表达式的书写规范,同时熟悉使用Pattern和Matcher类api,两者结合的功能很强大,几乎可以满足对字符串的操作。
// 1.构建Pattern对象
Pattern pattern = Pattern.compile("1[0-9]{10}");
// 2.构建Matcher对象
Matcher matcher = pattern.matcher("18888888888");
// 3.使用Matcher方法
System.out.println(matcher.matches());
// 整个字符串是否满足表达式
matcher.matches();
// 判断字符串中是否包含表达式
matcher.lookingAt();
// 遍历字符串
matcher.find();
matcher.find(int start);
// 返回前一次匹配的结果
matcher.group();
matcher.groupCount();
// 返回前一次匹配操作中寻找到的组的起始索引
matcher.start();
// 返回前一次匹配操作中寻找到的组的最后一个字符加一的值
matcher.end();
// 替换所有
matcher.replaceAll();
// 替换第一个
matcher.replaceFirst();
// 渐进式的替换
matcher.appendReplacement();
// 将现在Matcher用于一个新的字符串
matcher.reset();