java.lang.string.split,即split 方法,它实现的功能是将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 格式为:
stringObj.split([separator,[limit]])
其中stringObj是必选项,表示要被分解的 String 对象或文字。该对象不会被 split 方法修改。 separator 为可选项,表示字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。 limit 为可选项,该值用来限制返回数组中的元素个数。 值得注意的是: split 方法的结果是一个字符串数组,在 stringObj 中每个出现 separator 的位置都要进行分解,separator 不作为任何数组元素的部分返回。
一个例子
<span style="font-size:14px;">String srcstring="this is a about split test";
String stringarray[]=srcstring.split(" ");
//// 在每个空格字符处进行分解
for(String stemp:stringarray){
System.out.println(stemp);
}
String srcstring1=" this is a about split test";//有n个空格的话,分成的数组长度为n+1
//如果字符串中有多个空格时,则两个空格间认为是没有字符,结果字符串数组中该位置为空。
String stringarray1[]=srcstring1.split(" ");
for(String stemp:stringarray1){
System.out.println(stemp);
} </span>
这样输出结果为
<span style="font-size:14px;">this
is
a
about
split
test
另一个:
this
is
a
about
split
test</span>
另外一个例子
<span style="font-size:14px;">String srcstring="this is a about split test";
String stringarray[]=srcstring.split(" ",2);
//// 在每个空格字符处进行分解
for(String stemp:stringarray){
System.out.println(stemp);
}
输出结果为
this
is a about split test </span>
看看下面这个
<span style="font-size:14px;">String ipstring="59.64.159.224";
String iparray[]=ipstring.split(".");
for(String stemp:iparray){
System.out.println(stemp);
}
这个输出为空,为什么呢? </span>
因为 public string[] split(string regex) 这里的参数的名称是regex ,也就是 regular expression (正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式,以下是split 方法的实现代码:
public string[] split(string regex, int limit) {
return pattern.compile(regex).split(this, limit);
}
split 的实现直接调用的 matcher 类的 split 的方法。我们知道,“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。 只要将
<span style="font-size:14px;">String iparray[]=ipstring.split("."); </span>
改为
<span style="font-size:14px;">String iparray[]=ipstring.split("\\."); </span>
就可以了。
这里在列上一些转义字符
\\ 反斜杠
\t 间隔 ('\u0009')
\n 换行 ('\u000A')
\r 回车 ('\u000D')
\d 数字 等价于 [0-9]
\D 非数字 等价于 [^0-9]
\s 空白符号 [\t\n\x0B\f\r]
\S 非空白符号 [^\t\n\x0B\f\r]
\w 单独字符 [a-zA-Z_0-9]
\W 非单独字符 [^a-zA-Z_0-9]
\f 换页符
\e Escape
\b 一个单词的边界
\B 一个非单词的边界
\G 前一个匹配的结束
注意:public String[] split(String regex,int limit)根据匹配给定的正则表达式来拆分此字符串。
此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。
limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。
<span style="font-size:14px;">String s2="this is a test";
String sarray[]=s2.split("\s");
System.out.println("sarray.length="+sarray.length); </span>
题目中给出的匹配正则表达式为"/s",表示空白字符,此时给定的字符串中没有匹配的字符,则输出为原字符串,所以输出的字符长度为1.<span style="font-size:14px;">System.out.println(":ab:cd:ef::".split(":").length);//末尾分隔符全部忽略
System.out.println(":ab:cd:ef::".split(":",-1).length);//不忽略任何一个分隔符
System.out.println(StringUtils.split(":ab:cd:ef::",":").length);//最前面的和末尾的分隔符全部都忽略,apache commons
System.out.println(StringUtils.splitPreserveAllTokens(":ab:cd:ef::",":").length);//不忽略任何一个分隔符 apache commons
输出:
4
6
3
6 </span>
在java.lang包中有String.split()方法,返回是一个数组。
1、“.”和“|”都是转义字符,必须得加"\\";
如果用“.”作为分隔的话,必须是如下写法:
String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
如果用“|”作为分隔的话,必须是如下写法:
String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
2、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用
String.split("and|or");