劈裂Java中的字符串高达第n个分隔符

问题描述:

String s = "10.226.18.158:10.226.17.183:ABCD :AAAA" 

我的要求是字符串在分头3 :或最多2次:。即劈裂Java中的字符串高达第n个分隔符

类似String sa[] = s.split(),但与正则表达式分裂只能达到第3或第2。

s[0] = "10.226.18.158" 
s[1] = "10.226.17.183" 
s[2] = "ABCD :AAAA" 
+1

只是把它分解并连接元素0和1之后剩余的元素? – NilsH 2013-05-07 12:02:01

+1

看起来你正在拆分多组IP地址,混合使用IPv4和IPv6?你是否也只是需要这个字符串,还是有一个模式,看起来像这样? – melwil 2013-05-07 12:32:31

根据String#split()javadoc你可以添加一个数字来限制分割数。

s.split(":", 3); 

编辑:为melwil metions这将返回高达早已经过数数组。

所以在你分裂到第二:的例子中,你将需要3

s.split(":",3)返回输出

sa[0] = "10.226.18.158" 
sa[1] = "10.226.17.183" 
sa[2] = "ABCD :AAAA" 
通过 从Java文档引用

培训相关部分如何在第二个参数(限制)的作品。

limit参数控制应用模式为 的次数,因此会影响结果数组的长度。如果 的限制值n大于零,那么该模式将在 之前应用最多n-1次,该阵列的长度将不会大于n,并且该阵列的最后一个条目将包含超出最后匹配的 定界符的所有输入。如果n是非正值,那么该模式将尽可能多地应用为 ,并且该数组可以具有任意长度。如果n为零 那么该模式将尽可能多地应用,数组 可以具有任何长度,并且尾随的空字符串将被丢弃。

+0

可以谨慎的指出,拆分不会发生在第N个分隔符处,而是将结果数组限制为N的长度。在's.split(“:”,3);'中,它将拆分到第二个分隔符,导致大小为3的数组。 – melwil 2013-05-07 13:13:34

您可以分割你的字符串立足于一个非whitespece字符,\S{1},后跟一个冒号,:

String sa[] = s.split("\\S{1}:");