问题描述
我有一些输入的字符串 659
用户可以将一些字符串导入应用程序一次而无需任何区分大小写的策略,例如:“开始”、“开始”、“开始”、“结束”、“结束”和等
我有一个地图,我将我的字符串(例如“开始”)插入其中并将其放入 String usrInput;
中:
HashMap<String,String> myMap
现在我想检查 Map<String,String> listofActions = new HashMap<>();
listofActions.put(myStr,myStr);
成员以获取例如在每个案例模型中归档的“开始”(“开始”、“开始”、“开始”),目前我喜欢以下内容:
listofActions
所以我想知道:
1. 有没有办法在不区分大小写的情况下获取字符串值?
我还要在这里添加这个我不能使用 if (listofActions.containsKey(usrInput.toupperCase())
|| listofActions.containsKey(usrInput.toLowerCase())) {
/// some do
}
方法从 equalsIgnoreCase()
获取项目,因为它返回 Map
。
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。
,当您创建 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");
这样,无论是小写还是大写,它只会作为一种或另一种进行比较,并且表现为不区分大小写。