使用RegEx从坐标中提取数字

时间:2013-01-20 16:02:39

标签: java regex numbers

我是Java编程语言的初学者。

当我将(1,2)输入控制台(包含括号)时,如何编写代码以使用RegEx提取第一个和第二个数字?

如果没有这样的表达式来提取括号内的第一个/第二个数字,我将不得不改变输入坐标的方式为x,y而没有括号,并且应该更容易提取要使用的数字

1 个答案:

答案 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他们。但我认为这对于这项任务来说太过分了。