在一个单一的空格处拆分字符串

4
我希望将一个字符串按照每个空格拆分成一个字符串数组。
例如: This_sentence_gets__split. (这里的下划线表示空格)
变成 "This" "sentence" "gets" " " (请注意,双倍空格仍然为一个空格) "split." 我认为我可以使用 String.split(String regex) 来完成此操作,但是我不太擅长正则表达式,也不知道该如何实现。
编辑:
第一个空格后的任何空格也应被拆分为子字符串。例如:Split___this. 变成 "Split " " " " "this."

1
您需要的输出不是在单个空格处分割后得到的。单个空格 不会成为数组中的一个单独元素。因此,基本上,您的双倍空格将导致一个空字符串,而不是数组中的单个空格。 - Rohit Jain
@Fishstick 你想要如何分割这样的数据:A_B__C___D____E - Pshemo
@Pshemo 如果第一个空格之后有额外的空格,它们将被分割。我会编辑问题以反映这一点。 - Ryan Jackman
4个回答

7

我觉得这可能是你在寻找的(你可以使用\\s类来改进它,以便包括所有空格,如制表符、换行等)。

String data = "This_sentence__gets___split".replace('_', ' ');
// System.out.println(data);
String arr[] = data.split("(?<! ) |(?<= {2})");
for (String s : arr)
    System.out.println("\"" + s + "\"");

输出:

"This"
"sentence"
" "
"gets"
" "
" "
"split."

说明:

  • "(?<! ) " 只会在前面没有空格的空格处分割。
  • "(?<= {2})" 只会在前面有两个空格的地方进行分割。

干得好!我正要编辑我的答案,但是没有及时得到第二个正则表达式 :) - Marko Topolnik
谢谢,已接受答案。虽然去除额外的空格也可以,但学习这些东西很好。我会加入它。 - Ryan Jackman
@Fishstick 很高兴你喜欢它。 - Pshemo

1
尝试使用 StringTokenizer
 StringTokenizer st = new StringTokenizer("this is a test", " ", true);
 while (st.hasMoreTokens()) {
     System.out.println(st.nextToken());
 }

更新:

第三个参数(true)将把分隔符视为单独的标记,因此它们将单独返回。


0

我对正则表达式也不是非常了解,这就是为什么我选择使用Google Guava的Splitter类

示例:

private static final Splitter splitter = 
      Splitter.on(',').trimResults().omitEmptyStrings();

//results in {"some", "string"}
splitter.split("some string");

你可以尝试使用trimResults()、omitEmptyStrings()和其他选项来调整它,以满足你的需求。
: )

0

这并不难:

str.split(" ");

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