-3

私はJavaプログラミング言語の初心者です。

(1,2) をコンソールに入力すると (角かっこが含まれます)、RegEx を使用して最初と 2 番目の数値を抽出するコードをどのように記述すればよいでしょうか?

括弧内の 1 番目と 2 番目の数値を抽出する式がない場合は、座標の入力方法を括弧なしで x、y に変更する必要があります。これにより、使用する数値を抽出しやすくなります。

4

1 に答える 1

1

このコードを試してください:

public static void main(String[] args) {
    String searchString = "(7,32)";
    Pattern compile1 = Pattern.compile("\\(\\d+,");
    Pattern compile2 = Pattern.compile(",\\d+\\)");
    Matcher matcher1 = compile1.matcher(searchString);
    Matcher matcher2 = compile2.matcher(searchString);
    while (matcher1.find() && matcher2.find()) {
        String group1 = matcher1.group();
        String group2 = matcher2.group();
        System.out.println("value 1: " + group1.substring(1, group1.length() - 1 ) + " value 2: " + group2.substring(1, group2.length() - 1 ));
    }
}

ここで使用するのに正規表現が最適だとは思いません。入力が:(数値、数値)の形式になることがわかっている場合は、最初に角かっこを削除します。

stringWithoutBrackets = searchString.substring(1, searchString.length()-1) 

分割してトークン化するよりも

String[] coordiantes = stringWithoutBrackets.split(",");

Regex APIを調べたところ、次のようなこともできます。

public static void main(String[] args) {
    String searchString = "(7,32)";
    Pattern compile1 = Pattern.compile("(?<=\\()\\d+(?=,)");
    Pattern compile2 = Pattern.compile("(?<=,)\\d+(?=\\))");
    Matcher matcher1 = compile1.matcher(searchString);
    Matcher matcher2 = compile2.matcher(searchString);
    while (matcher1.find() && matcher2.find()) {
        String group1 = matcher1.group();
        String group2 = matcher2.group();
        System.out.println("value 1: " + group1 + " value 2: " + group2);
    }
}

主な変更点は、(?<== \))、(?=、)、(?<=、)、(?= \))を使用して角かっことカンマを検索しましたが、それらをキャプチャしませんでした。しかし、私は本当にこのタスクにはやり過ぎだと思います。

于 2013-01-20T16:29:20.180 に答える