[編集]この問題には正規表現を使用しません。代わりに、このメソッドを使用して、最後の文字と文字String#lastIndexOf(...)
の境界を見つけ、それらの値から部分文字列を返します。(
)
public static String[] splitParens(String s) {
if (s == null) return null;
int indexOfLastOpenParen = s.lastIndexOf('(');
int indexOfLastCloseParen = s.lastIndexOf(')');
return new String[] {
s.substring(0, indexOfLastOpenParen),
s.substring(indexOfLastOpenParen + 1, indexOfLastCloseParen),
s.substring(indexOfLastCloseParen + 1)
};
}
public static void main(String args[]) throws Exception {
String input[] = {
"Xbox 360 (black) Elite Console 120GB (Mason City Illinois ) $200",
"$200 2013 North Trail Camper (RT 202. Manchester, Maine) $224/mo.",
"Snowmobile Bike trailers (Winthrop / Augusta) $40 Monthly",
"\"Great Xmas Gift\" XBox 360 Guitar Hero (Springfied)"
};
Pattern p = Pattern.compile("\\(([^\\)]+)\\)");
for (String s : input) {
System.out.println(Arrays.asList(splitParens(s)));
}
// =>
// [Xbox 360 (black) Elite Console 120GB , Mason City Illinois , $200]
// [$200 2013 North Trail Camper , RT 202. Manchester, Maine, $224/mo.]
// [Snowmobile Bike trailers , Winthrop / Augusta, $40 Monthly]
// ["Great Xmas Gift" XBox 360 Guitar Hero , Springfied, ]
}
もちろん、より多くのエラーチェックが必要です(たとえば、エラーがない場合はどうなります(
か)
?)。