按空格拆分字符串,Java

时间:2013-10-25 23:22:58

标签: java regex split

这是一个字符串:

String s = "119 days 6 hours 13 minutes 24 seconds";

如何为获取数组进行拆分:

{
  "119 days",
  "6 hours",
  "13 minutes",
  "24 seconds"
}

我不知道如何自己做。

我查找String.split()并尝试了[a-z]\s regExp,但它会删除最后一个字符

5 个答案:

答案 0 :(得分:4)

针对此特定情况的一种方法,使用负面反对进行拆分。

import java.util.Arrays;

class rTest {
  public static void main (String[] args) {
    String s = "119 days 6 hours 13 minutes 24 seconds";
    String[] parts = s.split("(?<![^a-zA-Z])\\s");
    System.out.println(Arrays.toString(parts));
  }
}

正则表达式:

(?<!           look behind to see if there is not:
 [^a-zA-Z]     any character except: 'a' to 'z', 'A' to 'Z'
)              end of look-behind
\s             whitespace (\n, \r, \t, \f, and " ")

输出继电器

[119 days, 6 hours, 13 minutes, 24 seconds]

答案 1 :(得分:3)

你是在正确的道路上,但是你需要使用zero-width匹配组,这样他们就不会被吞下,所以像这样:

input.split(" (?=[0-9])");

答案 2 :(得分:2)

您可以拆分其后面有数字的每个空格。为此,您可以使用look ahead机制
(?=nextElement),因为split使用正则表达式。要表示正则表达式中的任何空格,您可以使用"\\s"来表示任何数字"\\d"

答案 3 :(得分:2)

这是您尝试的两个解决方案,首先您可以简单地将字符串拆分为s.split(" ");但是这将返回每个单词并简化所有空格。
因此,两个解决方案是按空格分割并通过数组并将每两个单词加在一起,中间有一个空格。
或者你可以改变输入字符串,这样你就可以分割除逗号等空格以外的东西(虽然这也涉及编辑字符串来自新格式的位置):

String s = "119 days, 6 hours, 13 minutes, 24 seconds";
String[] parts = s.split(", ");

答案 4 :(得分:2)

您可以使用split零宽度环视,但我更愿意在合理的情况下避免使用环视。使用Matcher会使过程代码更加冗长,但它具有使正则表达式更易于理解的附加优势。由于大多数程序员比正则表达式更好地理解过程语言,因此有时会产生更易于维护的代码。

String s = "119 days 6 hours 13 minutes 24 seconds";
Pattern regex = Pattern.compile("\\w+ \\w+"); // match two words
Matcher matcher = regex.matcher(s);
ArrayList<String> list = new ArrayList<String>();
while (matcher.find()) {
    list.add(matcher.group());
}
System.out.println("list=" + list);