如何将以空格字符开头的字符串拆分?

7

快速示例:

public class Test {
    public static void main(String[] args) {
        String str = "   a b";
        String[] arr = str.split("\\s+");
        for (String s : arr)
            System.out.println(s);
    }
}

我希望数组arr包含2个元素:"a"和"b",但实际结果中有3个元素:""(空字符串)、"a"和"b"。要如何才能得到正确的结果?


5
先使用trim()函数将其修整。 - Robert Harvey
4个回答

4
有点作弊,但是替换为:
String str = "   a b";

使用

String[] arr = "   a b".trim().split("\\s+");

1
另一种方法(非作弊):String arr[] = str.trim().split("\s+"); - Vladimir

2
另一种修剪它的方法是使用向前查看和向后查看来确保空格夹在两个非空格字符之间,类似于以下内容:
String[] arr = str.split("(?<=\\S)\\s+(?=\\S)");

这样做的问题在于它不会去掉前导空格,得到的结果如下:
   a
b

但是String#split(...)并不应该用来进行修整,因为它的作用是分割字符串而不是修整。


1
简单的解决方案是在 split(...) 调用之前使用 trim() 来删除前导(和尾随)空格。
你不能仅使用 split(...) 来实现这一点。分割正则表达式匹配字符串分隔符;即每个匹配的分隔符之前和之后都必然有一个子字符串(可能为空)。
您可以通过使用 split(..., 0) 处理空格位于末尾的情况。这会丢弃任何尾随的空字符串。但是,没有与丢弃前导空字符串等效的 split 形式。

0

不必修剪,您可以添加一个if来检查字符串是否为空。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接