public final void nameErrorLoop () {
while (error) {
System.out.println("Enter the employee's name.");
setName(kb.next());
if (name.contains("[A-Za-z]")) {
error = false;
}
else {
System.out.println("The name can only contain letters.");
}
}
error = true;
}
尽管在不同的方法中使用了类似的设置,但此方法仍然陷入常量循环,因为if语句始终为false。我已经尝试了.matches()
,我在Interent上找到的任何内容都没有帮助到目前为止。有什么想法吗?感谢您的帮助。
编辑:我刚刚注意到,当我完成项目时,试图打印' name'以后只显示名字,而最后一个名字从不打印。有什么方法可以得到这个名字'字符串包括两者?
答案 0 :(得分:10)
String.contains
不使用正则表达式 - 它只是检查一个字符串是否包含另一个字符串,就像“foobar”包含“oob”一样。
听起来你想检查name
只是否包含字母,在这种情况下你应该检查以下内容:
if (name.matches("^[A-Za-z]+$"))
+
(而非*
)将检查它是否为空; ^
和$
会检查除了字母之外的其他内容。
但是,如果您希望它是全名,您可能希望允许空格,连字符和撇号:
if (name.matches("^[-' A-Za-z]+$"))
还要考虑重音字符 - 以及其他语言的标点符号。
答案 1 :(得分:0)
易。 .contains()不是你的想法。它确实完全匹配字符串。
"anything".contains("something that's not a regular expression");
使用此
Pattern p2=Pattern.compile("[A-Za-z]+");//call only once
p2.matcher(txt).find();//call in loop
或者这个:
for(char ch: "something".toCharArray()){
if(Character.isAlphabetic(ch)){
}
}