为什么这会失败?
String n = "h107";
if (n.matches("\\D+")) {
System.out.println("non digit in it");
}
我睡了一夜,但我仍然没有得到它。 我现在得到了一个解决方案:
if (n.matches(".*\\D+.*")) {
但在我(可能缺乏知识)中,第一个也应该匹配。因为它必须匹配一个完整的字符串,那么' ^'是什么意思呢?一行开头的字符。
答案 0 :(得分:6)
这是.matches()
的反复出现的问题:它被误解了。它不进行正则表达式匹配。问题在于,甚至其他语言也成为了这种错误的牺牲品(python就是一个例子)。
问题在于它会尝试匹配您的整个输入。
使用Pattern
,Matcher
和.find()
代替(.find()
真正的正则表达式匹配,即找到与输入):
private static final Pattern NONDIGIT = Pattern.compile("\\D");
// in code
if (NONDIGIT.matcher(n).find())
// there is a non digit
你实际上应该使用Pattern
; String
.matches()
每次都会重新编译模式 。使用Pattern
时,它只编译一次。
答案 1 :(得分:1)
String.matches
返回true。只需将正则表达式更改为\d+
,如果整个字符串由数字组成,则返回true:
String n = "h107";
if (!n.matches("\\d+")) {
System.out.println("non digit in it");
}