你可以将EqualsIgnoreCase设为一套吗?

时间:2015-04-09 02:38:40

标签: java set

所以,假设我有一个程序,并且Set中的用户目标称为“计算机”。用户输入'computer','COMPUTER','ComPutEr',但它从未找到它,因为它没有正确大写。

你将如何进行Set words = ...... ......并获取Set中的信息并检查它是否等于'Computer',但忽略大写。 Oooor!使其他所有内容都是小写的,但是第一个字符。

示例代码:

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

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

感谢帮助人员

2 个答案:

答案 0 :(得分:2)

您可以使用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);

答案 1 :(得分:0)

我最终解决了这个问题,感谢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程序。我目前正在考虑一种方法,使String'args [0]'只需1行来解决所有问题,但这是目前适用于我的方法。

谢谢!