我想测试字符串是否以数字结尾。我希望以下Java行打印为true。为什么打印错误?
System.out.println("I end with a number 4".matches("\\d$"));
答案 0 :(得分:15)
你的正则表达式与整个字符串不匹配,只与最后一部分匹配。尝试下面的代码,它应该工作正常,因为它匹配整个字符串。
System.out.println("I end with a number 4".matches("^.+?\\d$"));
您可以对此进行测试,以便快速检查以下在线正则表达式测试人员: http://www.regexplanet.com/simple/index.html。这也为您提供了应该在结果中使用适当转义的Java代码中使用的内容。
。+ 将确保数字前至少有一个字符。 ?将确保它执行惰性匹配而不是贪婪匹配。
答案 1 :(得分:9)
在Java Regex中,Matcher.find()
(在字符串中的任何位置找到匹配项)和Matcher.matches()
(匹配整个字符串)之间存在差异。
字符串只有matches()
方法(实现等效于此代码:Pattern.compile(pattern).matcher(this).matches();
),因此您需要创建一个与完整字符串匹配的模式:
System.out.println("I end with a number 4".matches("^.*\\d$"));
答案 2 :(得分:3)
您的RegEx表达式为slightly off。试试这个:
System.out.println("I end with a number 4".matches("^.*\\d$"));
如果您一次评估一条线路,也可以像这样进行测试:
System.out.println("I end with a number 4".matches(".*\\d"));
您的原始表达式,没有。*仅测试该字符串是否为数字,并且未考虑该数字之前的文本。这就是为什么它总是错误的。
以下评估为真:
System.out.println("4".matches("^\\d$"));
答案 3 :(得分:1)
System.out.println("I end with a number 4".matches(".*\\d")); // prints true
或
String s = "I end with a number 4";
System.out.println(Character.isDigit(s.charAt(s.length()-1))); // prints true
答案 4 :(得分:-1)
试试这个:
System.out.println("I end with a number 4".matches(".*\\d\$"));