加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 正则表达式检查String是否包含非数字失败

发布时间:2020-12-15 04:24:16 所属栏目:Java 来源:网络整理
导读:为什么这会失败? String n = "h107";if (n.matches("D+")) { System.out.println("non digit in it");} 我有一个晚上睡觉,我仍然没有得到它. 我现在得到了解决方案: if (n.matches(".*D+.*")) { 但在我(可能缺乏知识)中,第一个也应该匹配.如果它必须匹
为什么这会失败?

String n = "h107";
if (n.matches("D+")) {
  System.out.println("non digit in it");
}

我有一个晚上睡觉,我仍然没有得到它.
我现在得到了解决方案:

if (n.matches(".*D+.*")) {

但在我(可能缺乏知识)中,第一个也应该匹配.如果它必须匹配一个完整的String,那么行开头的’^’字符的重点是什么.

解决方法

这是.matches()的反复出现的问题:它被错误命名.它不进行正则表达式匹配.而问题在于,甚至其他语言也成为了这种错误的牺牲品(python就是一个例子).

问题是它会尝试匹配您的整个输入.

使用模式,匹配器和.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()每次都会重新编译一个模式.使用模式,它只编译一次.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读