List 返回 false,表示它不包含任何项目。但是,在检查列表时似乎?

List is returning false, that it does not contain an item. However, when checking the list it seems to?

我正在开发一个插件,遇到了这个对我来说毫无意义的错误。我有一个包含多个字符串的列表,在检查它是否包含它时,在我的 if 语句中使用 .contains it returns false。

if(e.getPlayer().isOp()){

        List<String> warps = Main.getPlugin().getConfig().getStringList("warplist");
        String title = e.getLine(0);
        String toWarp = ChatColor.stripColor(e.getLine(1).toLowerCase().trim());

        if(title.equalsIgnoreCase("warp")){

            if(warps.contains(toWarp)){

                e.setLine(0, ChatColor.AQUA + "[Warp]");
                e.setLine(1, ChatColor.GREEN + toWarp.substring(0, 1).toUpperCase() + toWarp.substring(1).toLowerCase());

                e.getPlayer().sendMessage(ChatColor.GOLD + "Warp Sign Created!");
                e.getPlayer().sendMessage(ChatColor.ITALIC + "Plugin Created By Sodex234");

                @SuppressWarnings("unchecked")
                List<Location> allSigns = (List<Location>) Main.getPlugin().getConfig().getList("signs");

                allSigns.add(e.getBlock().getLocation());

                Main.getPlugin().getConfig().set("signs", allSigns);
                Main.getPlugin().saveConfig();

            }else{
                e.getPlayer().sendMessage(ChatColor.RED + "That Warp Does Not Exist.");
                e.getPlayer().sendMessage(ChatColor.RED + "You put: " + toWarp + ". Only these Warps exist: " + warps);
                e.getBlock().setType(Material.AIR);
            }

        }

    }

在游戏中我收到消息 "That warp does not exist." - 然后是列表本身。但是,当它向我显示列表时,它清楚地包含该项目。

例如;该列表中有 4 个项目,"test"、"test2"、"test3"、"test4"。我放下一个标志,它知道这是一个扭曲,当它检查名称时,它 returns 错误?但是,名称是 "test" 并且 arraylist 包含它。如您所见,我对其进行了修剪,将聊天颜色条纹化,并将其设为小写(列表中的每一项都是小写)。

已修复。它包含 Minecraft 不支持的非字母数字字符。使用正则表达式来解决这个问题:

toWarp = toWarp.replaceAll("[^A-Za-z0-9 ]", "");

toWarp 字符串进行的剥离似乎不足以删除所有字符,在字符串上留下一些不可呈现的字符导致不匹配。

可以做的一件事是通过一些正则表达式去除所有非字母数字字符。