拆分空格不能正常工作

时间:2012-05-02 18:09:08

标签: java regex split whitespace

我搜索了很多关于正则表达式的内容,最后我发现最好使用“\\ s +”来分割字符串
但令人惊讶的是它与原始字符串无关:

private static void process(String command) {
    command = command.substring(0, command.length() - 1);
    String[] splitted = command.split("\\s+");
    for (String str : splitted) {
        System.out.println(str);
    }
}  

示例输入:

Boolean b = new Boolean(true);  

首选输出:

[Boolean,b,=,new,Boolean(true)]  

但我的方法输出是:

Boolean b = new Boolean(true)

1 个答案:

答案 0 :(得分:2)

如果您希望“首选输出”使用Arrays.toString(splitted)。但是,您的代码可以像预期的那样工作。它在新行上打印数组的每个元素。所以这段代码:

  private static void process(String command) {
    command = command.substring(0, command.length() - 1);

    String[] splitted = command.split("\\s+");

    for (String str : splitted) {
      System.out.println(str);
    }

    System.out.println(Arrays.toString(splitted).replace(" ", ""));
  }

  public static void main(String[] args) {
    process("Boolean b = new Boolean(true); ");
  }

生成此输出:

Boolean
b
=
new
Boolean(true);
[Boolean, b, =, new, Boolean(true);]

请注意,由于输入字符串中的尾随空格,substring操作无法正常工作。您可以事先使用command.trim()来删除任何前导/尾随空格。

修改

我编辑了我的代码,因为正如@Tim Bender所说,Arrays.toString的输出中的数组元素之间存在空格,而这并不是OP想要的。