0

我正在尝试使用字符串拆分函数拆分字符串,这是一个示例:

    String[] list = "   Hello   ".split("\\s+");
    System.out.println("String length: " + list.length);
    for (String s : list) {
        System.out.println("----");
        System.out.println(s);
    }

这是输出:

String length: 2
----

----
Hello

如您所见,前导空格成为字符串数组中的空元素,但尾随空格不是。

有谁知道为什么?

4

2 回答 2

3

您需要使用指定限制并指定限制的其他拆分方法-1

String[] list = "   Hello   ".split("\\s+", -1);

保留尾随空格 - 默认行为是按照javadoc省略尾随空格


编辑(评论的答案):

要修剪前导空格,您可以在拆分前去掉前导空格String

String str = "   Hello   ".replaceAll("^\\s+", "");
String[] list = str.split("\\s+", -1);
于 2013-08-02T00:03:52.753 回答
2

拆分文档

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

所以实际上split(regex)与使用相同

split(regex, 0);

它的文件

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

因此,如果您想包含尾随的空字符串,则只需使用非零值,例如

split("\\s+",10);

但这也会将结果数组限制为最多 10 个元素。要摆脱这个问题,请使用一些负数,例如

split("\\s+",-1);
于 2013-08-02T00:15:21.277 回答