String.contains总是显示为false

时间:2014-10-30 22:56:16

标签: java string contains

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'以后只显示名字,而最后一个名字从不打印。有什么方法可以得到这个名字'字符串包括两者?

2 个答案:

答案 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)){

    }
}