簡體   English   中英

字符串的額外Java輸入驗證

[英]Extra java input validation for strings

我要這樣做,以便仍然可以檢測到簡短的輸入,例如“ Londo”和“ Lon”,但是要使其較小並在基本上不復制和粘貼代碼的情況下使用它,有什么提示嗎? 謝謝。

if (Menu.answer1.equals("London"))
        {
         if (location.equals("London")) {
             System.out.print(location + " ");
             System.out.print(date + " ");
             System.out.print(degrees + "C ");
             System.out.print(wind + "MPH ");
             System.out.print(winddirection + " ");
             System.out.print(weather + " ");
             System.out.println("");
         }

您可以使用startsWith()

String city = "London";
if (city.startsWith("Lon")) {
    // do something
}

另外,如果您需要檢查一些子字符串,則可以使用contains方法:

Menu.answer1 = "London";
Menu.answer1.contains("ondo"); // true

如果要檢查一組固定的替代方法,則可以使用contains來使用有效輸入的列表:

List<String> londonNames = Arrays.asList("London", "Londo", "Lon");
if (londonNames.contains(Menu.answer1)) {
 ...
}

您可以使用( case-insensitive )正則表達式執行相同的操作,例如:

(?)Lon[az]{0,3}其中

  • (?)=不區分大小寫
  • Lon =開頭的3個字符
  • [az] {0,3} = 0到3之間的任意數量的字母

這是一個例子:

String regex = "(?)Lon[a-z]{0,3}";
System.out.println("London".matches(regex));
System.out.println("Lond".matches(regex));
System.out.println("Lon".matches(regex));

如果潛在的問題是用戶可以輸入多個名稱之一,並且您希望允許使用縮寫,那么一種相當標准的方法是擁有一個可接受名稱的表。

給定用戶輸入,遍歷表測試“表條目是否以用戶鍵入的字符串開頭?” (就像這里以前的答案之一一樣)。 如果是,則您有可能匹配。

繼續尋找。 如果您獲得第二次匹配,則用戶輸入不明確,應拒絕。

另外,您可以收集所有匹配的名稱,然后在錯誤消息中使用它們。 (“選擇倫敦,朗富,朗巴之一”)。

這種方法的優點是(與一長串的if-then-else邏輯相比),當您只想擁有更多數據時,不需要編寫更多代碼。

它會自動使用最短的唯一縮寫,並會在由於新添加的名稱而使曾經唯一的縮寫不再唯一時進行調整。

暫無
暫無

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

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