Java 如何拆分只包含分隔符的字符串?
我正在使用以下代码:Java 如何拆分只包含分隔符的字符串?,java,regex,split,Java,Regex,Split,我正在使用以下代码: String sample = "::"; String[] splitTime = sample.split(":"); // extra detail omitted System.out.println("Value 1 :"+splitTime[0]); System.out.println("Value 2 :"+splitTime[1]); System.out.println("Value 3 :"+splitTime[2]); 我得到ArrayIndexO
String sample = "::";
String[] splitTime = sample.split(":");
// extra detail omitted
System.out.println("Value 1 :"+splitTime[0]);
System.out.println("Value 2 :"+splitTime[1]);
System.out.println("Value 3 :"+splitTime[2]);
我得到ArrayIndexOutofBound
异常。String.split()
另见:
使用函数StringTokenizer,其中传递字符串和第二个参数作为分隔符
使用splittime.length函数从以下位置查找长度:
因此,结果数组中不包括尾随的空字符串
因此,如果传入“:
”,将得到一个空数组,因为所有分隔符都是尾随的
如果要确保获得的条目不超过三个,应使用:
String[] splitTime = sample.split(":", 3);
输入“:
”确实会在输出数组中提供三个空字符串
但是,如果输入中恰好只有一个“:
”,那么数组中仍然只有两个元素。您应该检查splitTime数组的长度 默认情况下,将丢弃尾随的空字符串,这是正确的
如果希望有尾随的空字符串,则应使用并传递一个负数作为limit
参数
limit
参数控制
填充图案将被应用,因此会影响生成的填充图案的长度
数组。如果极限n大于零,则模式
最多应用n-1次,阵列的
长度将不大于n,并且数组的最后一个条目
将包含最后一个匹配分隔符之外的所有输入。如果n
如果为非正,则该模式将应用尽可能多的次数
可能,数组可以有任意长度。如果n是零,那么
阵列将尽可能多次应用该模式
具有任何长度,则将丢弃尾随的空字符串
请注意,这是拆分(aString,0)的同义词。
:
此方法的工作原理类似于使用给定表达式和零限制参数调用双参数split
方法。因此,结果数组中不包括尾随的空字符串
此外,还应该使用循环从数组中获取值;这避免了可能出现的ArrayIndexOutOfBoundsException
因此,更正后的代码应该是(假设需要尾随的空字符串):
String sample=“::”;
String[]splitTime=sample.split(“:”,-1);
for(int i=0;i
输出:
Value 0 : ""
Value 1 : ""
Value 2 : ""
值0:“
值1:“
值2:“
也许是这样
int ndx = 0;
StringTokenizer t = new StringTokenizer(": : ::::",":");
while (t.hasMoreElements())
{
System.out.println(String.format("Value %d : %s", ++ndx,t.nextElement()));
}
关于-ve限制的一点很好,但仍然需要检查数组边界,以防输入中只有一个“:”。错误的建议。StringTokenizer将两个冒号视为一个分隔符。无论如何,StringTokenizer是一个遗留类;建议开发人员改用split()。关于使用splitTime.length:在本例中,长度始终为零。所有“标记”都是零长度字符串,StringTokenizer从不返回空标记。使用“:”:“.split(:”)实际返回一个空数组,而不是两个元素数组。它返回两个标记,每个标记只包含一个空格。但Raja特别询问了只包含分隔符和更多点的字符串。1.使用StringTokenizer时,应始终使用hasMoreTokens()和nextToken(),而不是hasMoreElements()和nextElement()。这些只是为了充实枚举接口。2.没有必要像以前那样使用String.format();像System.out这样的PrintStreams有自己的format()方法,传统主义者还有printf()方法。:-)谢谢Alan,你可能已经猜到了,java不是我的主要语言。然而,我正在努力变得更加熟练。所以我很感谢你的评论。FWIW,StringTokenizer不推荐使用。
int ndx = 0;
StringTokenizer t = new StringTokenizer(": : ::::",":");
while (t.hasMoreElements())
{
System.out.println(String.format("Value %d : %s", ++ndx,t.nextElement()));
}