如何拆分只包含分隔符的字符串?

16 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]);
Run Code Online (Sandbox Code Playgroud)

我越来越ArrayIndexOutofBound异常了.如何String.split()处理连续或尾随/开始分隔符?

另见:

Mic*_*ers 25

Alnitak是正确的,默认情况下会丢弃尾随空字符串.

如果要使用尾随空字符串,则应使用split(String, int)并传递负数作为limit参数.

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

请注意,这split(aString)是一个同义词split(aString, 0):

此方法就像通过split使用给定表达式和limit参数为零调用双参数方法一样工作.因此,结尾的空字符串不包含在结果数组中.

此外,您应该使用循环来获取数组中的值; 这避免了可能的ArrayIndexOutOfBoundsException.

所以你的纠正代码应该是(假设你想要尾随的空字符串):

String sample = "::";
String[] splitTime = sample.split(":", -1);
for (int i = 0; i < splitTime.length; i++) {
    System.out.println("Value " + i + " : \"" + splitTime[i] + "\"");
}
Run Code Online (Sandbox Code Playgroud)

输出:

Value 0 : ""
Value 1 : ""
Value 2 : ""


Jug*_*gal 0

使用 StringTokenizer 函数,在其中传递字符串和第二个参数作为分隔符

使用 splittime.length 函数查找长度