你可以 equalsIgnoreCase 一个集合吗?

Can you equalsIgnoreCase a Set?

所以,假设我有一个程序,集合中的用户目标称为 'Computer'。用户输入 'computer'、'COMPUTER'、'ComPutEr',但由于大小写不正确,始终找不到。

您将如何获取 Set words = ... ... ... 并获取 Set 内部的信息并检查它是否等于 'Computer',但忽略大写。哦哦!使其他一切都是小写,但第一个字符。

示例代码:

Set<String> words= this.getConfig().getConfigurationSection("Test").getKeys(false);
    if( allGroups.contains('Computer') ) {

请忽略 this.getConfig().getConfigurationSection("Test").getKeys(false);。我正在寻找修复我正在制作的 Minecraft 插件的答案,但这似乎是一个更基本的 Java 知识问题。

谢谢大家的帮助

您可以使用 TreeSet,因为它可以对输入进行排序,它可以使用比较器。使用它你可以实现你想要的行为。像

Comparator<String> comparator = new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        if (o1 == o2) {
            return 0;
        }
        if (o1 == null) {
            return -1;
        } else if (o2 == null) {
            return 1;
        }
        return o1.toLowerCase().compareTo(o2.toLowerCase());
    }
};
Set<String> set = new TreeSet<>(comparator);

或(来自评论)String.CASE_INSENSITIVE_ORDER喜欢

Set<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);

感谢 Elliot 提醒我,我最终解决了这个问题。

Set<String> words= new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
words.addAll(this.getConfig().getConfigurationSection("Test").getKeys(false));

args[0] = args[0].toLowerCase();
args[0] = args[0].substring(0, 1).toUpperCase() + args[0].substring(1);

if( words.contains(args[0]) ) {

虽然在我的书中这不是解决问题的好方法,但我已经使用相同的方法在我编写的 ATM 程序中解决了这个问题。我目前正在考虑一种方法,使字符串 'args[0]' 只需一行即可修复所有问题,但这是目前对我有用的方法。

谢谢!