2010-10-26 130 views
1

我有一個關於在Java驗證的問題,我看了以前的話題,似乎沒有人回答我的小問題。驗證在Java中的字符串

我想要做的是驗證什麼是在構造函數中放入字符串變量,但也使用set方法時。

我需要的是如果先生小姐太太或女士被輸入,然後將其設置爲變量(標題),如果不是,則將標題設置爲「未設置」並打印錯誤,現在我知道如何到最後一部分,其驗證用戶輸入到變量我卡在...我試過使用數組,但不能得到它的工作,並嘗試如果語句,再次無法得到它的功能

+1

發佈您的[編輯]代碼。 – hvgotcodes 2010-10-26 18:57:00

回答

4
public void setTitle(final String title) 
{ 
    if (title.matches("^Mrs|Mr|Miss|Ms$")) 
    { 
    this.title = title; 
    } 
    else 
    { 
    this.title = "Not Set"; 
    System.err.format("%s is not a valid title, expecting Mrs,Mr,Miss,Ms\n", title); 
    } 
} 

,如果你想要做的不區分大小寫然後改變正則表達式:

"(?i)^Mrs|Mr|Miss|Ms$" 

那麼你可以小寫整個事情和大寫只是第一個字母重新歸你輸入你真正想要的東西。谷歌爲「Java正確的案例」找到一些預先編寫的代碼片段。

更簡潔的一個襯墊,再次區分大小寫:

public void setTitle(final String title) 
{ 
    title.matches("^Mrs|Mr|Miss|Ms$")) ? this.title= title: this.title= "Not Set"; 
} 
+1

我更喜歡這個答案......與Regexp相當靈活! – Necronet 2010-10-26 19:16:23

0

使用此

String title = textBoxTitle.getText(); 
    if(!title.equals("Mr") && !title.equals("Miss") && !title.equals("Mrs") && !title.equals("Ms")) 
    { 
     // Text is invalid 
    } 
    else 
    { 
     // Text is valid 
    } 
+1

負面測試很難從硬性的角度閱讀和理解,爲什麼不測試等於||等於||那會比這樣的負面測試更好。 – 2010-10-26 19:29:48

0

爲什麼不直接調用,它驗證,然後設置值小法?

private void validateString(String) { 

if string is valid 
call setter 
} 
+0

或把它變成'validateAndSet()',並從ctor和public setter調用 – Anon 2010-10-26 19:12:32

+0

一個方法名不應該有一個不期望的副作用,這是一個可怕的名字。方法應該只做一件事而且只做一件事,內部工作應該是一個黑盒子,絕對沒有理由在方法的名稱中「驗證」。所有來電者應該關心的是最終結果。如果你打算把它稱爲「isValidPrefix」,然後返回true或false,那會更好,因爲它現在很糟糕。 – 2010-10-26 19:26:08

-1

我敢肯定ü沒有類似的東西 -


    if(title =="Mr."){ blah.. } // this will check the address

do this instead ..

if(title.equals("Mr."){blah..} // this will check the values..

+0

這就是我在做''title.equals'時所做的'我意識到我做錯了什麼。 – Chris 2010-10-27 01:22:47

-1

創建一組您所關心的話(大寫它們),然後看看標題是否屬於該集合:

Set allowedTitles = new HashSet(); 
allowedTitles.add("MR"); 
allowedTitles.add("MRS"); 
allowedTitles.add("MS"); 
allowedTitles.add("MISS"); 
if (! allowedTitles.contains(textBoxTitle.getText().trim().toUpperCase()) { 
    //print exception 
} 
else { title = textBoxTitle.getText().trim()); 
+0

檢查大寫是unicode的一個壞主意,unicode中的大寫字母可能會產生問題,另一個大寫字母會被歸一化爲相同的字符。原始問題也希望他們在正確的情況下,他們沒有指定任何關於不區分大小寫的內容。 – 2010-10-26 21:04:11

+0

夠公平的。然後使用toLowerCase()。我認爲downvote有點苛刻,因爲概念是使用「contains」。如果案件不是問題,那麼顯然不要打擾。 – 2010-10-27 15:34:50