Java将字符串与正则表达式进行比较-while循环

Posted

技术标签:

【中文标题】Java将字符串与正则表达式进行比较-while循环【英文标题】:Java comparing string to regex - while loop 【发布时间】:2013-12-16 18:58:05 【问题描述】:

我希望用户输入一个字符串,如果该字符串与我的正则表达式不匹配,那么我希望输出一条消息并让用户再次输入一个值。

问题是即使字符串与正则表达式匹配,它也会将其视为不匹配。

我的正则表达式: 这应该等于 - Name, Name

[[A-Z][a-zA-Z]*,\s[A-Z][a-zA-Z]*]

我的while 循环:

  System.out.println("Enter the student's name in the following format - surname, forename: ");  studentName = input.next();
  while (!studentName.equals("[[A-Z][a-zA-Z]*,\\s[A-Z][a-zA-Z]*]")) 
    System.out.println("try again");
    studentName = input.next();
  

【问题讨论】:

【参考方案1】:

equals 方法检查字符串等价,而不是匹配正则表达式。

只需将equals 替换为matches。您还应该删除外部方括号。

【讨论】:

当我这样做时,它匹配错误的方式。即,如果它是我想要的格式,它会报告错误。如果我删除前面的! !studentName.equals 它会在匹配正则表达式时报告错误 我有while (!studentName.matches("[A-Z][a-zA-Z]*,\\s[A-Z][a-zA-Z]*")),但是当我尝试Name, Name 时,它会打印两次Try Again 可能Name, Name 用于分隔输入中的字符串。尝试在您打印的消息中添加错误的输入。 看来你是对的,它正在打印Name, try again Name try again 我该如何解决这个问题? Scanner javadoc 说:A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace【参考方案2】:

会不会是你的正则表达式错误?

test.matches("[A-Z][a-zA-Z]*,\\s[A-Z][a-zA-Z]*")

对我来说很好。

【讨论】:

以上是关于Java将字符串与正则表达式进行比较-while循环的主要内容,如果未能解决你的问题,请参考以下文章

Java 正则简单用法

java中正则表达式基本用法

JAVA中的正则表达式简介

字符串与正则表达式

java:正则表达式

Java正则表达式入门