正则表达式拉出每个非空间组

时间:2013-03-15 18:12:14

标签: java regex

输入:

2 43: 72: Y

期望输出:

ArrayList<String> resultArr = { "2", "43:", "72:", "Y" };

我目前创建此数组的代码是......

String stateString = "2 43: 72: Y";
String stateStringFinder = "\\s*(\\S+)(\\s*(\\S+))+";
Pattern stateStringPattern = Pattern.compile(stateStringFinder);

Matcher matcher = stateStringPattern.matcher(stateString);

while(matcher.find()) {
    resultArr.add(matcher.group());
}

但是resultArr的内容是{ "2 43: 72: Y" },这表明我的正则表达式过于贪婪,并且匹配整个字符串。

如何将其分解,以便放入stateString的每个“子串”,同时忽略空格?

4 个答案:

答案 0 :(得分:4)

使用String.split

String stateString = "2 43: 72: Y";
String[] resultArray = stateString.split("\\s");
List<String> resultList = Arrays.asList(resultArray);

您可能希望将"\\s+"视为分隔符,而不仅仅是"\\s",以避免在有多个连续空格时在结果中使用空字符串。

答案 1 :(得分:2)

试试这个。

String abc= "2 43: 72: Y";
List<String> strList = Arrays.asList(abc.split("\\s"));

答案 2 :(得分:1)

更容易的是:

List<String> list = Arrays.asList(stateString.split(" "));

答案 3 :(得分:1)

用于解决查询的示例代码:

public class RegexTester {
public static void main(String[] args) {
    String input = "2 43: 72: Y";

    Pattern pattern = Pattern.compile("[^\\s]+");
    Matcher matcher = pattern.matcher(input);
    List<String> list = new ArrayList<String>();
    while (matcher.find()) {
        list.add(matcher.group());
    }
    System.out.println(list);
}

}