如何在保持空格的同时split()一个String

时间:2015-07-07 15:30:51

标签: java regex

如何分割一串单词并保留空格?

以下是代码:

String words[] = s.split(" "); 

字符串包含:hello world

代码运行后,单词[]包含:"hello" "" world

理想情况下,它不应该是中间的空字符串,但包含两个空格:words []应该是:"hello" " " " " world

如何获得此结果?

4 个答案:

答案 0 :(得分:14)

您可以使用lookahead/lookbehind断言:

String[] words = "hello  world".split("((?<=\\s+)|(?=\\s+))");

其中(?<=\\s+)(?=\\s+)是零宽度组。

答案 1 :(得分:5)

如果您可以在一个字符串中容忍两个空格,则可以

String[] words = s.split("\\b");

然后单词包含("hello", " ", "world")

答案 2 :(得分:4)

Student是单向的。

从技术上讲,正则表达式使用了lookahead和lookbehind。每个s.split("((?<= )|(?= ))");之后的单个空格是分隔符。

答案 3 :(得分:1)

你可以这样做:

List<String> result = new LinkedList<>();
int rangeStart = 0;
for (int i = 0; i < s.length(); ++i) {
  if (Character.isWhitespace(s.charAt(i))) {
    if (rangeStart < i) {
      result.add(s.substring(rangeStart, i));
    }
    result.add(Character.toString(s.charAt(i)));
    rangeStart = i + 1;
  }
}
if (rangeStart < s.length()) {
  result.add(s.substring(rangeStart));
}

是的,没有正则表达式,起诉我。通过这种方式,您可以更轻松地查看其工作原理。