1.String是不可变的
也就是之前提到的,它是final的;当需要改变字符串的内容时,String类的方法都会返回一个新的String对象;同时,如果内容没有改变,String的方法只是返回指向原对象的引用而已,节约了存储空间,避免了额外的开销。
2.StringBuilder比StringBuffer更高效
StringBuilder是JavaSE5引入的,StringBuffer是之前用的(线程安全的,因此开销也会大一些)。最常用的方法有append()
toString()
delete()
StringBuilder的作用是用来更高效的构造字符串对象。
3.JavaSE5后也拥有了C语言的格式化输出printf()
你可以在Java代码中写C语言的printf(),这没问题,甚至是格式修饰符%d、%f也完全可以使用;
Java中与printf()
等价的方法是format()
。如果你怀旧,你可以使用printf()
。
System.out.printf("I am %d", x);
System.out.format("I am %d", x);
4.正则表达式:它是一种在Java之上的新语言
4.1 基础
- 在普通的正则表达式式中,用
\d
表示一位数字;而在Java中,用\\d
表示一位数字。 -?
表示假如你要找一个数字,它可能有一个负号在最前面,或者什么符号也没有(?的作用)。+
在正则表达式中有特殊含义,它表示有一个多或多个之前的表达式,通常放在正则表达式后面;如果要表示普通的+,应该用\\+
-?\\d+
表示可能有一个负号,或者什么符号也没有(?的作用),后面跟着一位或多位数字。|
表示或的意思;()
有着将表达式分组的效果。(-|\\+)?\\d+
表示可能有一个负号或一个加号,或者什么符号也没有(?的作用),后面跟着一位或多位数字。
4.2 运用正则表达式最简单的途径就是利用String类已有的方法来作用于String对象上
matches()
用正则表达式作为参数来给String做匹配:
public class Test {
public static void main(String[] args) {
System.out.println("-1234".matches("-?\\d+"));
System.out.println("5678".matches("-?\\d+"));
System.out.println("+5678".matches("-?\\d+"));
System.out.println("+123".matches("(-|\\+)?\\d+"));
}
}
/* Output:
* true
* true
* false
* true
*/
split()
它表示将字符串从正则表达式匹配的地方切开,并且与正则表达式匹配的部分都被切没了!最后返回一个各个被切开的剩余部分的字符串数组。
" "
表示用空格作为正则表达式的匹配部分,匹配到空格就将字符串切开。\\W
大写W在正则表达式中表示非单词字符(一个字母也可作为单词)。\\w
小写w在正则表达式中表示一个单词字符。\\W+
表示用一个或多个非单词字符作为正则表达式的匹配部分。m\\W+
表示字母m开头(啥字母都行)后面跟着一个或多个非单词字符作为正则表打式的匹配部分。- 由于
s.split()
分隔后会返回一个字符串数组,直接输出的话会默认打印分隔后的字符串数组的地址;要想让数组真正输出到屏幕上,可以使用Arrays工具类的toString()方法,将字符串数组转为String类并输出。
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
String s = "I am WRJ ! ";
System.out.println(Arrays.toString(s.split(" ")));
System.out.println(Arrays.toString(s.split("\\W+")));
System.out.println(Arrays.toString(s.split("m\\W+")));
System.out.println(Arrays.toString(s.split("\\w+")));
}
}
/* Output:
* [I, am, WRJ, !]
* [I, am, WRJ]
* [I a, WRJ ! ]
* [, , , ! ]
*/
replaceFirst()
将原字符串中第一个具有左参数也就是正则表达式部分的字符,,替换成右参数replaceAll()
将原字符串中所有具有左参数也就是正则表达式部分的字符串,替换成右参数。
public class Test {
public static void main(String[] args) {
String s = "I am WRJ ! ";
System.out.println(s.replaceFirst("WRJ", "HLZX"));
System.out.println(s.replaceFirst("I|am|WRJ", "HLZX"));
System.out.println(s.replaceAll("I|am|WRJ", "HLZX"));
}
}
/* Output:
* I am HLZX !
* HLZX am WRJ !
* HLZX HLZX HLZX !
*/
p297 13.6.2 之后的先不看