使用模式和匹配器查找数字

时间:2014-05-15 16:00:44

标签: java regex

我正在尝试使用Pattern和Matcher来确定给定的字符串是否有2位数之间的空格。例如" 5 1"应该回归真实," 51"应该回来假。起初我使用了正则表达式的string.replaceAll并且效果很好,但转移到模式我似乎无法使其工作。

    String findDigit = "5      1/3";
    String regex = "(\\d) +(\\d)";
    findDigit = findDigit.replaceAll(regex, "$1 $2");

    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(findDigit);
    System.out.println(m.matches());
    System.out.println(m.hitEnd()); 

我首先开始这个。 replaceAll无故障地工作并删除多余的空格,但m.matches和m.hitEnd都返回false。然后我想我可能做错了所以我把案例简化为

    String findDigit = "5";
    String regex = "\\d";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(findDigit);
    System.out.println(m.matches());
    System.out.println(m.hitEnd()); 

并且匹配返回true(显然)但是当我将其更改为此

    String findDigit = "5 3";
    String regex = "\\d";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(findDigit);
    System.out.println(m.matches());
    System.out.println(m.hitEnd()); 

回来都是假的。所以我想我的主要问题是如何确定我的字符串中有任何数字,然后更具体地说,如果我的字符串中有一个数字空格数字,我该如何判断。我以为那是hitEnd,但我想我错了。提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果您正在寻找具有多个空格的匹配但又希望保留输出的格式,则可以使用组和反向引用。

例如:

String input = "blah 5             6/7";
Pattern p = Pattern.compile("(\\d)\\s+(\\d)");
Matcher m = p.matcher(input);
while (m.find()) {
    System.out.printf("Whole match: %s\n\tFirst digit: %s\n\tSecond digit: %s\n", m.group(), m.group(1), m.group(2));
}

<强>输出

Whole match: 5             6
    First digit: 5
    Second digit: 6

答案 1 :(得分:0)

答案当然是m.find()抱歉今天早上很愚蠢。感谢所有甚至看过这个的人:)