私はJavaプログラミング言語の初心者です。
(1,2) をコンソールに入力すると (角かっこが含まれます)、RegEx を使用して最初と 2 番目の数値を抽出するコードをどのように記述すればよいでしょうか?
括弧内の 1 番目と 2 番目の数値を抽出する式がない場合は、座標の入力方法を括弧なしで x、y に変更する必要があります。これにより、使用する数値を抽出しやすくなります。
このコードを試してください:
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);
}
}
主な変更点は、(?<== \))、(?=、)、(?<=、)、(?= \))を使用して角かっことカンマを検索しましたが、それらをキャプチャしませんでした。しかし、私は本当にこのタスクにはやり過ぎだと思います。