欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字符串的两种分割方式 正则表达式CC++C#JDK 

程序员文章站 2022-03-07 12:19:48
...

众所周知,在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]字符串的两种分割方式
            
    
    
        正则表达式CC++C#JDK  ,很明显这和我们期望的结果是不一样的,为什么呢?原因就是"|"是正则表达式的关键字,所以如果要用关键字来作分割符的话,就需要将关键字转义,方法就是在"|"前加上"\\"变成"\\|"。那么修改后的代码就是:

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源代码。

就到这里,下次见 字符串的两种分割方式
            
    
    
        正则表达式CC++C#JDK