1

输入:

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

4 回答 4

4

使用String.split

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

当您有多个连续空格时,您可能希望将其视为"\\s+"分隔符,而不是简单地"\\s",以避免结果中出现空字符串。

于 2013-03-15T18:13:58.643 回答
2

试试这个。

String abc= "2 43: 72: Y";
List<String> strList = Arrays.asList(abc.split("\\s"));
于 2013-03-15T18:15:49.750 回答
1

更容易的是:

List<String> list = Arrays.asList(stateString.split(" "));
于 2013-03-15T18:15:51.830 回答
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);
}

}

于 2013-03-15T18:19:10.517 回答