0

文字列を取得し、すべての値を引用符で囲んで ArrayList に配置する簡単な方法を探しています

例えば

The "car" was "faster" than the "other"

含むArrayListが欲しい

car, faster, other

これにはRegExを使用する必要があるかもしれないと思いますが、もっと簡単な方法があるかどうか疑問に思っています。

4

3 に答える 3

2

正規表現を使用すると、実際には非常に簡単です。注: このソリューションでは、引用符をネストすることはできないと想定しています。

private static final Pattern QUOTED = Pattern.compile("\"([^\"]+)\"");

// ...
public List<String> getQuotedWords(final String input)
{
    // Note: Java 7 type inference used; in Java 6, use new ArrayList<String>()
    final List<String> ret = new ArrayList<>();
    final Matcher m = QUOTED.matcher(input);
    while (m.find())
        ret.add(m.group(1));
    return ret;
}

正規表現は次のとおりです。

"           # find a quote, followed by
([^"]+)     # one or more characters not being a quote, captured, followed by
"           # a quote

もちろん、これはJava文字列の引用符で囲まれているため、引用符で囲む必要があります...したがって、この正規表現のJava文字列: "\"([^\"]+)\"".

于 2013-07-20T06:25:01.230 に答える
1

このスクリプトを使用して、入力を解析します。

public static void main(String[] args) {
    String input = "The \"car\" was \"faster\" than the \"other\"";
    List<String> output = new ArrayList<String>();
    Pattern pattern = Pattern.compile("\"\\w+\"");
    Matcher matcher = pattern.matcher(input);

    while (matcher.find()) {
        output.add(matcher.group().replaceAll("\"",""));
    }
}

出力リストには次が含まれます。

[car,faster,other]
于 2013-07-20T06:27:46.380 に答える
0

Apache 共通の String Utils substringsBetweenメソッド を使用できます。

String[] arr = StringUtils.substringsBetween(input, "\"", "\"");
List<String> = new ArrayList<String>(Arrays.asList(arr));
于 2013-07-20T06:28:21.003 に答える