簡體   English   中英

String.contains始終顯示為false

[英]String.contains always appears false

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'字符串包含兩者嗎?

String.contains不使用正則表達式-只是以“ foobar”包含“ oob”的方式檢查一個字符串是否包含另一個字符串。

聽起來您想檢查name 包含字母,在這種情況下,您應該檢查以下內容:

if (name.matches("^[A-Za-z]+$"))

+ (而不是* )將檢查它是否為非空; ^$將檢查是否只有字母。

但是,如果您希望它是一個全名,則最好允許使用空格,連字符和撇號:

if (name.matches("^[-' A-Za-z]+$"))

還應考慮帶重音符號-和其他語言的標點符號。

簡單。 .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)){

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM