0

長い文字列から文字列の配列を取得しようとしています。配列は、他の 2 つの文字列 (???および???私の場合) の間で一致する文字列で構成されます。次のコードを試しましたが、期待した結果が得られません

Pattern pattern = Pattern.compile("\\?\\?\\?(.*?)\\?\\?\\?");
    String[] arrayOfKeys = pattern.split("???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj");

    for (String key : arrayOfKeys) {
        System.out.println(key);
    }

私の期待される結果は次のとおりです。

["label.missing", "some.label"]
4

3 に答える 3

3

を使用して入力文字列のPattern.matcher()を取得し、を使用して必要なパターンを見つけます。指定された文字列に一致する部分文字列を検索します。MatcherMatcher.find()Matcher.find()Pattern

Pattern pattern = Pattern.compile("\\?{3}(.*?)\\?{3}");
Matcher m = pattern.matcher(inputString);

while (m.find()) {
    System.out.println(m.group(1));
}

Pattern.split()パターンを区切り文字として使用して文字列を分割します (その後、区切り文字部分は破棄されます)。これは明らかに、この場合に必要なものではありません。正規表現は、抽出するテキストと一致するように設計されています。

3 回書く代わりに、正確に 3 回繰り返す 量指定子を使用するようにパターンを短縮します。{3}\?

于 2013-05-17T14:48:31.487 に答える
0

分割しようとしている文字列入力を作成し、input.split() を呼び出します。

String input = "???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj";
String[] split = input.split("\\?\\?\\?");

ここで試してみてください: http://ideone.com/VAmCyu

于 2013-05-17T14:49:18.303 に答える
0
    Pattern pattern = Pattern.compile("\\?{3}(.+?)\\?{3}");
    Matcher matcher= pattern.matcher("???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj");

     List<String> aList = new ArrayList<String>();

     while(matcher.find()) {
         aList.add(matcher.group(1));
     }


    for (String key : aList) {
        System.out.println(key);
    }
于 2013-05-17T14:54:08.270 に答える