我用扫描程序读取了正则表达式str.matches("\\D+")
的条件,但在输入char + digit时,此测试失败,例如3x或e3,但不应该发生。
它应该在字符串中的任何位置传递任何非数字出现,即使它是一个符号。
答案 0 :(得分:3)
如果m
是Matcher
,那么m.matches
仅在整个字符串与模式匹配时才会返回true
。如果您只想检查字符串的某些部分是否匹配,则可以使用m.find
代替m.matches
。 (注意:我不确定这是否真的是你遇到的问题。)
答案 1 :(得分:1)
答案 2 :(得分:0)
此调用无法与3e
匹配,因为:
str.matches("\\D+")
与:
相同str.matches("^\\D+$")
因为String#matches
获取给定的正则表达式并匹配完整的输入。
为了确保至少有一个非数字,你应该更好地使用这个基于前瞻性的正则表达式:
str.matches("(?=\\d*\\D).*")
(?=\\d*\\D)
为正向预测,确保给定输入中至少有1位非数字。
答案 3 :(得分:-1)
\ D匹配任何非数字字符,因此如果您传递一个带有数字的字符串,它当然会失败。
如果您只想匹配字符和数字,可以执行以下操作:
matches("[a-zA-Z0-9"]+);