我是Java编程语言的初学者。
当我将(1,2)输入控制台(包含括号)时,如何编写代码以使用RegEx提取第一个和第二个数字?
如果没有这样的表达式来提取括号内的第一个/第二个数字,我将不得不改变输入坐标的方式为x,y而没有括号,并且应该更容易提取要使用的数字
答案 0 :(得分: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)
并用split
标记它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);
}
}
主要的变化是我使用(?&lt; == \)),(?=,),(?&lt; =,),(?= \))来搜索括号和逗号而不是caputre他们。但我认为这对于这项任务来说太过分了。