1

次の形式でファイルから入力を取得しています。

(int1,int2) (int3,int4)

ここで、Javaコードでint1、int2、int3、およびint4を読み取りたいと思います。Javaで正規表現マッチングを使用してそれを行うにはどうすればよいですか。ありがとう。

4

6 に答える 6

8
String[] ints = "(2,3) (4,5)".split("\\D+");
System.out.println(Arrays.asList(ints));
// prints [, 2, 3, 4, 5]

空の値を回避するには:

String[] ints = "(2,3) (4,5)".replaceAll("^\\D*(.*)\\D*$", "$1").split("\\D+");
System.out.println(Arrays.asList(ints));
// prints [2, 3, 4, 5]
于 2012-09-14T12:12:39.393 に答える
4
Pattern p = Pattern.compile("\\((\\d+),(\\d+)\\)\\s+\\((\\d+),(\\d+)\\)");
String input = "(123,456) (789,012)";

Matcher m = p.matcher(input);

if (m.matches()) {
  int a = Integer.parseInt(m.group(1), 10);
  int b = Integer.parseInt(m.group(2), 10);
  int c = Integer.parseInt(m.group(3), 10);
  int d = Integer.parseInt(m.group(4), 10);
}
于 2012-09-14T12:12:49.943 に答える
1

独自の方法で構築するには、はるかに単純な正規表現を使用できます。

String s = "(1,2) (3,4)";
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(s);
while (m.find()) {
    System.out.println(m.group());
}
于 2012-09-14T12:15:02.550 に答える
1

あなたは次のようなことをすることができます:

String str = "(1,2) (3,4)";
Matcher m = Pattern.compile("\\((\\d+),(\\d+)\\) \\((\\d+),(\\d+)\\)").matcher(str);
if (m.matches()) {
   System.out.println(m.group(1)); // number 1
   ...
}
于 2012-09-14T12:14:09.997 に答える
1

これはうまくいきます:

String[] values = s.substring(1).split("\\D+");
于 2012-09-14T12:18:06.373 に答える
0

"\\((\\d*),(\\d*)\\)\\s*\\((\\d*),(\\d*)\\)"

于 2012-09-14T12:13:37.583 に答える