Java 使用模式和匹配器查找数字
我试图使用Pattern和Matcher来确定给定的字符串是否有两位数之间的空格。例如,“51”应该返回为真,“51”应该返回为假。起初,我在正则表达式中使用string.replaceAll,它工作得很好,但转到模式时,我似乎无法让它工作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");
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、 查找()。这实际上极大地帮助我回答了另一个问题,谢谢!