字符串分割--Java中String.split()⽤法
转载⾃:
在java.lang包中有String.split()⽅法,返回是⼀个数组。
  1、“.”和“|”都是转义字符,必须得加"\\";
  如果⽤“.”作为分隔的话,必须是如下写法:
String.split("\\."),这样才能正确的分隔开,不能⽤String.split(".");
如果⽤“|”作为分隔的话,必须是如下写法:
String.split("\\|"),这样才能正确的分隔开,不能⽤String.split("|");
  2、如果在⼀个字符串中有多个分隔符,可以⽤“|”作为连字符,⽐如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以⽤
  String.split("and|or");
  3、public String[] split(String regex,int limit)根据匹配给定的正则表达式来拆分此字符串。
  此⽅法返回的数组包含此字符串的每个⼦字符串,这些⼦字符串由另⼀个匹配给定的表达式的⼦字符串终⽌或由字符串结束来终⽌。数组中
  的⼦字符串按它们在此字符串中的顺序排列。如果表达式不匹配输⼊的任何部分,则结果数组只具有⼀个元素,即此字符串。
  4、public string[] split(string regex)
  这⾥的参数的名称是 regex ,也就是 regular expression (正则表达式)。这个参数并不是⼀个简单的分割⽤的字符,⽽是⼀个正则表达式,
他对⼀些特殊的字符可能会出现你预想不到的结果,⽐如测试下⾯的代码:
(1)⽤竖线 | 分隔字符串,你将得不到预期的结果
1 @Test
java中split的用法
2public void fun1() {
3//String[] aa = "aaa|bbb|ccc".split("|");
4        String[] aa = "aaa|bbb|ccc".split("\\|");// 这样才能得到正确的结果
5        System.out.String(aa));8    }
结果
[aaa, bbb, ccc]
(2)⽤竖 * 分隔字符串运⾏将抛出PatternSyntaxException异常,⽤加号 + 也是如此。
String[] aa = "aaa*bbb*ccc".split("*");
//String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能得到正确的结果
(3)显然,+ * 不是有效的模式匹配规则表达式,⽤"\\*" "\\+"转义后即可得到正确的结果。
(4) "|" 分隔串时虽然能够执⾏,但是却不是预期的⽬的,"\\|"转义后即可得到正确的结果。
(5)还有如果想在串中使⽤""字符,则也需要转义.⾸先要表达"aaaa\bbbb"这个串就应该⽤"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果:
String[] aa = "aaa\\bbb\\bccc".split(\\\\);
(6)还有就是点号".",也要⾸先转义才能得到正确的结果。
第⼀种⽅法:
string s="abcdeabcdeabcde";
string[] sArray=s.Split('c') ;
foreach(string i in sArray) Console.WriteLine(i.ToString());
输出下⾯的结果:
ab
deab
deab
de
第⼆种⽅法:
我们看到了结果是以⼀个指定的字符进⾏的分割。使⽤另⼀种构造⽅法对多个字符进⾏分割:
string s="abcdeabcdeabcde";
string[] sArray1=s.Split(new char[3]{'c','d','e'}) ;
foreach(string i in sArray1) Console.WriteLine(i.ToString());
可以输出下⾯的结果:
ab
ab
ab
第三种⽅法:
除了以上的这两种⽅法以外,第三种⽅法是使⽤正则表达式。新建⼀个控制台项⽬。
然后先添加 using System.Text.RegularExpressions;
using System.Text.RegularExpressions
string content=agcsmallmacsmallgggsmallytx;
string[] resultString=Regex.Split(content,small,RegexOptions.IgnoreCase)
foreach(string i in resultString)
Console.WriteLine(i.ToString());
输出下⾯的结果:
agc
mac
ggg
ytx
第四种⽅法:
1)
string str1="我*****是*****⼀*****个*****教*****师";
string[] str2; str1=str1.Replace("*****","*") ;
str2=str1.Split(’*‘) ; foreach(string i in str2)
Console.WriteLine(i.ToString());
以下两种情况答案⼀致
1 @Test
2public void fun2() {
3    String str1="我*****是*****⼀*****个*****教*****师";
4    place("*****", "");//不是⽤的正则表达式,直接替换
5    System.out.println(str1);
6    }
7
8
9    @Test
10public void fun3() {
11    String str1="我*****是*****⼀*****个*****教*****师";
12    placeAll("\\*\\*\\*\\*\\*", "");//正确
13//placeAll("\\*****", "");//结果错误
14    System.out.println(str1);
15    }
我是⼀个教师
第五种⽅法:
string str1=”我**是*****⼀*****个*****教*****师“;
我希望显⽰的结果为:我是⼀个教师。我如果采⽤上⾯的第四种⽅法来做就会产⽣下⾯的错误:我是⼀个教师。中间有空格输出,所以输出结果并不是希望的结果,这就⼜回到了正则表达式了,这时可以采⽤下⾯的第五种⽅法:
string str1=‘我**是*****⼀*****个*****教*****师“;
string[] str2 = System.Text.RegularExpressions.Regex.Split(str1,@[*]+);
foreach(string i in str2)
Console.WriteLine(i.ToString());
这⾥通过[*]+ 巧妙的完成了我们的⽬标。
另外的⽅法
@Test
public void fun4() {
String str1="我**是*****⼀*****个***教*****师";
place("*****", "");//不是⽤的正则表达式,直接替换    place("***", "");
place("**", "");
System.out.println(str1);
}
@Test
public void fun5() {
String str1="我**是*****⼀*****个***教*****师";
placeAll("\\*+", "");//⽤到正则表达式
/
/placeAll("\\*****", "");//结果错误
System.out.println(str1);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。