[英]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}
其中
這是一個例子:
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.