[英]figuring out where to put equalsIgnoreCase() to avoid case sensitivity
[英]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
的新实例时,您可以重写它的一些方法,例如put
和containsKey
,如下所示:
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.