我正在尝试使用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,但我想我错了。提前谢谢。
答案 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()抱歉今天早上很愚蠢。感谢所有甚至看过这个的人:)