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 に答える