Java将字符串与regex-while循环进行比较
我希望用户输入一个字符串,如果该字符串与我的正则表达式不匹配,那么我希望输出一条消息,用户再次输入一个值 问题是,即使字符串与正则表达式匹配,它也会将其视为不匹配 我的正则表达式: 这应该等于-Java将字符串与regex-while循环进行比较,java,regex,while-loop,java.util.scanner,Java,Regex,While Loop,Java.util.scanner,我希望用户输入一个字符串,如果该字符串与我的正则表达式不匹配,那么我希望输出一条消息,用户再次输入一个值 问题是,即使字符串与正则表达式匹配,它也会将其视为不匹配 我的正则表达式: 这应该等于-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: "); s
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();
}
equals
方法检查字符串等价性,而不是匹配正则表达式
只需将
等于
替换为匹配项
。您还应该删除外部方括号。可能是您的regexp错误吗
test.matches("[A-Z][a-zA-Z]*,\\s[A-Z][a-zA-Z]*")
对我来说很好。当我这样做时,它与错误的方向匹配。i、 e.如果是我想要的格式,它会报告错误。如果我删除
代码>在前面!studentName.equals
当它与regexI have匹配时会报告一个错误,(!studentName.matches(“[A-Z][A-zA-Z]*,\\s[A-Z][A-zA-Z]*”)
但是当我尝试Name时,Name
会打印重试两次,很可能Name,Name
会在输入中分隔字符串。尝试在您打印的邮件中添加错误的输入。看起来您是对的,它正在打印Name,Try-reach-Name-Try-reach
如何解决此问题?Scanner
javadoc说:Scanner使用分隔符模式将其输入拆分为标记,默认情况下与空白匹配