检查 2 个不区分大小写的字符串或使用 equalsIgnoreCase 方法
Check 2 strings without case sensitivity or use equalsIgnoreCase method
我有一些输入的字符串 String usrInput;
用户可以将一些字符串一次性导入到 App 中而无需任何区分大小写的策略,例如:“start”,“Start”,“START”,“end”,“END” " 等等
我有一个地图,我将我的字符串(例如“开始”)插入其中并将其放入 HashMap<String, String> myMap
:
Map<String, String> listOfActions = new HashMap<>();
listOfActions.put(myStr, myStr);
现在我想检查 listOfActions
成员以在每个案例模型中获取例如“开始”(“开始”,“开始”,“START”),目前我喜欢以下内容:
if (listOfActions.containsKey(usrInput.toUpperCase())
|| listOfActions.containsKey(usrInput.toLowerCase())) {
/// some do
}
所以我想知道:
1. 有什么方法可以不区分大小写地获取字符串值吗?
我也会在这里添加这个我不能使用 equalsIgnoreCase()
方法从 Map
获取项目,因为它 return Boolean
.
2. 我在 switch-case 语句中有类似的问题来检查 2 个不区分大小写的字符串是否相等。
如果您只使用输入作为映射键(即您以后不需要在原始大小写中复制字符串),我建议在将它们插入映射之前将所有输入小写:
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。
您可以做的一件事是将所有内容设为大写或小写,然后进行比较。
string.toLowerCase().equals("other string");
string.toUpperCase().equals("OTHERSTRING");
这样一来,无论是小写还是大写,都只会作为一个或另一个进行比较,就像不区分大小写一样。
当您创建 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 usrInput;
用户可以将一些字符串一次性导入到 App 中而无需任何区分大小写的策略,例如:“start”,“Start”,“START”,“end”,“END” " 等等
我有一个地图,我将我的字符串(例如“开始”)插入其中并将其放入 HashMap<String, String> myMap
:
Map<String, String> listOfActions = new HashMap<>();
listOfActions.put(myStr, myStr);
现在我想检查 listOfActions
成员以在每个案例模型中获取例如“开始”(“开始”,“开始”,“START”),目前我喜欢以下内容:
if (listOfActions.containsKey(usrInput.toUpperCase())
|| listOfActions.containsKey(usrInput.toLowerCase())) {
/// some do
}
所以我想知道:
1. 有什么方法可以不区分大小写地获取字符串值吗?
我也会在这里添加这个我不能使用 equalsIgnoreCase()
方法从 Map
获取项目,因为它 return Boolean
.
2. 我在 switch-case 语句中有类似的问题来检查 2 个不区分大小写的字符串是否相等。
如果您只使用输入作为映射键(即您以后不需要在原始大小写中复制字符串),我建议在将它们插入映射之前将所有输入小写:
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。
您可以做的一件事是将所有内容设为大写或小写,然后进行比较。
string.toLowerCase().equals("other string");
string.toUpperCase().equals("OTHERSTRING");
这样一来,无论是小写还是大写,都只会作为一个或另一个进行比较,就像不区分大小写一样。
当您创建 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