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循环的主要内容,如果未能解决你的问题,请参考以下文章