簡體   English   中英

檢查 2 個不區分大小寫的字符串或使用 equalsIgnoreCase 方法

[英]Check 2 strings without case sensitivity or use equalsIgnoreCase method

我有一些輸入的字符串String usrInput; 該用戶可以在沒有任何區分大小寫的策略的情況下將一些字符串導入應用程序,例如:“start”、“Start”、“START”、“end”、“END”等。

我有一個 Map 我將我的字符串(例如“start”)插入其中並將其放入HashMap<String, String> myMap

Map<String, String> listOfActions = new HashMap<>();
listOfActions.put(myStr, myStr);

現在我想檢查listOfActions成員以獲取例如在每種情況下提交的“start” model(“start”,“Start”,“START”),目前我喜歡如下:

if (listOfActions.containsKey(usrInput.toUpperCase())
        || listOfActions.containsKey(usrInput.toLowerCase())) {
    /// some do
}

所以我想知道:

1.有什么方法可以不區分大小寫獲取String值? 我還將在此處添加此內容,我無法使用equalsIgnoreCase()方法從Map獲取項目,因為它返回Boolean

2.我在 switch-case 語句中有類似的問題來檢查 2 個字符串是否不區分大小寫。

如果您僅將輸入用作 map 鍵(即您以后不需要在原始大小寫中復制字符串),我建議在將所有輸入插入 map 之前將它們小寫:

Map<String, String> listOfActions = new HashMap<>();
listOfActions.put(myStr.toLowerCase(), myStr);

這將簡化稍后定位值的過程,因為您知道所有鍵都已小寫,因此查找變得容易:

if (listOfActions.containsKey(myStr.toLowerCase())) {
  // do something
}

您可以使用

Map<String, String> listOfActions = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

其他解決方案可以是 Apache 的 CaseInsensitiveMap 或 Spring 的 LinkedCaseInsensitiveMap。

有關這些解決方案的更多詳細信息,請參閱https://www.baeldung.com/java-map-with-case-insensitive-keys

當您創建HashMap的新實例時,您可以重寫它的一些方法,例如putcontainsKey ,如下所示:

Map<String, String> map = new HashMap<>() {
    @Override
    public String put(String key, String value) {
        return super.put(key.toLowerCase(), value);
    }
    @Override
    public boolean containsKey(Object key) {
        return super.containsKey(key.toString().toLowerCase());
    }
};

map.put("START", "doStart");

System.out.println(map); // {start=doStart}

System.out.println(map.containsKey("START")); // true
System.out.println(map.containsKey("Start")); // true
System.out.println(map.containsKey("start")); // true

您可以做的一件事是將所有內容都設為大寫或小寫,然后進行比較。

string.toLowerCase().equals("other string");
string.toUpperCase().equals("OTHERSTRING");

這樣,無論是小寫還是大寫,它都只會被比較為一個或另一個,並且就像不區分大小寫一樣。

暫無
暫無

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

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