文字列を取得し、すべての値を引用符で囲んで ArrayList に配置する簡単な方法を探しています
例えば
The "car" was "faster" than the "other"
含むArrayListが欲しい
car, faster, other
これにはRegExを使用する必要があるかもしれないと思いますが、もっと簡単な方法があるかどうか疑問に思っています。
正規表現を使用すると、実際には非常に簡単です。注: このソリューションでは、引用符をネストすることはできないと想定しています。
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文字列: "\"([^\"]+)\""
.
このスクリプトを使用して、入力を解析します。
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]
Apache 共通の String Utils substringsBetweenメソッド を使用できます。
String[] arr = StringUtils.substringsBetween(input, "\"", "\"");
List<String> = new ArrayList<String>(Arrays.asList(arr));