字符串的两种分割方式 正则表达式CC++C#JDK
程序员文章站
2022-03-07 12:19:54
...
众所周知,在Java中分割字符串有两种方式split()和StringTokenizer。那么这两种方式有什么区别呢?假设我们有这样一个字符串"a|b|c",现在想通过Java程序将其按“|”分割,那么我们期望会得到3个字符串a,b,c。
先来看看第一种方式split(), 代码如下
public class SplitStringTester {
public static void main(String[] args) {
String s="a|b|c";
System.out.println(Arrays.toString(s.split("|"))); //分割后打印数组
}
}
那么结果是:[, a, |, b, |, c] ,很明显这和我们期望的结果是不一样的,为什么呢?原因就是"|"是正则表达式的关键字,所以如果要用关键字来作分割符的话,就需要将关键字转义,方法就是在"|"前加上"\\"变成"\\|"。那么修改后的代码就是:
public class SplitStringTester {
public static void main(String[] args) {
String s="a|b|c";
System.out.println(Arrays.toString(s.split("\\|"))); //分割后打印数组
}
}
这样我们就可以得到期望的结果啦。
再来看看StringTokenizer方法,代码如下:
public class SplitStringTester {
public static void main(String[] args) {
String s="a|b|c";
StringTokenizer st =new StringTokenizer(s,"|"); //注意这里还是使用正则表达式的关键字"|"作为分割符
while(st.hasMoreElements()){
System.out.print(st.nextElement());
if(st.hasMoreElements())
System.out.print(",");
}
}
}
现在让我们再来看下运行结果: a,b,c。很好这正是我们想要的结果,虽然我们依然使用了正则表达式的关键字"|"。
那么这两种方式间的差异在哪里?
split()方法采用的是正则表达式的方式来分割字符串,所以当使用正则表达式关键字作为分割符时,需要先转义;而StringTokenizer通过判断字符来完成的,所以不会受正则表达式关键字的影响。具体的差异请参看JDK源代码。
就到这里,下次见
推荐阅读