Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用模式和匹配器查找数字_Java_Regex - Fatal编程技术网

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

Java 使用模式和匹配器查找数字,java,regex,Java,Regex,我试图使用Pattern和Matcher来确定给定的字符串是否有两位数之间的空格。例如,“51”应该返回为真,“51”应该返回为假。起初,我在正则表达式中使用string.replaceAll,它工作得很好,但转到模式时,我似乎无法让它工作 String findDigit = "5 1/3"; String regex = "(\\d) +(\\d)"; findDigit = findDigit.replaceAll(regex, "$1 $2");

我试图使用Pattern和Matcher来确定给定的字符串是否有两位数之间的空格。例如,“51”应该返回为真,“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()); 
很明显,当我把它改成这个的时候

    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()); 

回来都是假的。所以我想我的主要问题是如何首先确定字符串中是否有任何数字,然后更具体地说,如何确定字符串中是否有数字空格数字。我原以为那是致命一击,但我想我错了。提前谢谢。

答案当然是m。为今天早上的愚蠢感到抱歉。感谢所有看过这篇文章的人:)

如果要查找多个空格的匹配项,但希望保留输出的格式,则可以使用组和反向引用

例如:

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这么快就没有解释为什么?好吧,谢谢投票支持我的人,我现在意识到我很愚蠢。。。m、 查找()。这实际上极大地帮助我回答了另一个问题,谢谢!