java中的字符串api String 类有封装了很多针对字符串操作的功能;不同的函数接收参数是不一样的,有的接收字符串参数,有的接收正则表达式参数。 之前用的时候没有注意这块,导致偶尔会出现一些问题。
比如下面这段代码:
public class Test {
public static void main(String[] args){
String src = "aaa.add.d";
System.out.println(src.contains("."));
System.out.println(src.split(".").length);
String src2 = "aaa-add-d";
System.out.println(src2.contains("-"));
System.out.println(src2.split("-").length);
}
}
输出结果为:
true
0 //按照预想的这里应该输出3
true
3
其实原因很简单:contains 方法的参数是CharSequence的实现类(包括了String,StringBuffer等),而split方法的参数是正则表达式;而 . 表示任意字符的正则,所以结果显而易见了。
这里列下以正则表达式为参数的方法,备忘:
matches()
replaceAll()
replaceFirst()
split()
要注意replace的参数是字符串,避免与reaplceAll和replaceFist混淆。
另外自己以前也容易将endsWith 和startWith两个方法的参数类型误以为是可以传正则的。