我使用以下代码:
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()
如何处理连续或尾随/开始分隔符?
另见:
答案 0 :(得分:24)
Alnitak是正确的,默认情况下会丢弃尾随空字符串。
如果您想要尾随空字符串,则应使用split(String, int)
并将负数作为limit
参数传递。
limit
参数控制的次数 应用模式,因此影响结果的长度 阵列。如果限制 n 大于零则为模式 将最多应用 n - 1次,数组 长度不会大于 n ,也就是数组的最后一个条目 将包含除最后匹配分隔符之外的所有输入。如果 n 如果是非正数,那么模式将被应用多次 可能,阵列可以有任何长度。如果 n 为零则 该模式将尽可能多地应用,阵列可以 有任何长度,尾随空字符串将被丢弃。
请注意,split(aString)
是split(aString, 0)
的同义词:
此方法就像通过使用给定表达式和limit参数为零调用双参数
split
方法一样工作。因此,结尾的空字符串不包含在结果数组中。
此外,您应该使用循环来获取数组中的值;这避免了可能的ArrayIndexOutOfBoundsException
。
所以你的更正代码应该是(假设你想要尾随的空字符串):
String sample = "::";
String[] splitTime = sample.split(":", -1);
for (int i = 0; i < splitTime.length; i++) {
System.out.println("Value " + i + " : \"" + splitTime[i] + "\"");
}
输出:
Value 0 : "" Value 1 : "" Value 2 : ""
答案 1 :(得分:4)
因此,结尾的空字符串不包含在结果数组中。
所以,如果你传入“::
”,你将得到一个空数组,因为所有的分隔符都在尾随。
如果您想确保不再而不是三个条目,您应该使用:
String[] splitTime = sample.split(":", 3);
输入“::
”确实会在输出数组中为您提供三个空字符串。
但是如果输入恰好只有一个“:
”,那么你仍然只能获得数组中的两个元素。
答案 2 :(得分:1)
或许这样吗?
int ndx = 0;
StringTokenizer t = new StringTokenizer(": : ::::",":");
while (t.hasMoreElements())
{
System.out.println(String.format("Value %d : %s", ++ndx,t.nextElement()));
}
答案 3 :(得分:0)
使用函数StringTokenizer,其中u传递字符串,第二个参数作为分隔符
使用splittime.length函数查找长度
答案 4 :(得分:0)
你应该检查splitTime数组的长度。