-3

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

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

如果没有这样的表达式来提取括号内的第一个/第二个数字,我将不得不将输入坐标的方式更改为不带括号的 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) 

然后用 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);
    }
}

主要的变化是我使用 (?<==\))、(?=,)、(?<=,)、(?=\)) 来搜索括号和逗号,但不使用它们。但我真的认为这对这项任务来说太过分了。

于 2013-01-20T16:29:20.180 回答