输入:
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
的每个“子串”,同时忽略空格?
答案 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);
}
}