如何制作一个字符串数组

时间:2013-02-20 04:54:15

标签: java arrays string case-insensitive

当我创建一个字符串数组时,equalsIgnorecase无法识别它,在eclipse中,它建议我将数组更改为其他内容,副verca。

  public void onChat(PlayerChatEvent event) {
      Player player = event.getPlayer();
      String[] curse = new String[] {"rude1", "rude2", "rudeN"};
      if (event.getMessage().equalsIgnoreCase(curse)) {
        event.setCancelled(true);
        player.sendMessage("Don't Swear");
     }
 }
}

这是我的视频游戏的诅咒过滤器。我做错了什么?

5 个答案:

答案 0 :(得分:1)

你需要通过curses循环检查每一个。

for (String c : curse) {
  ... do check ...
}

答案 1 :(得分:0)

而不是if (event.getMessage().equalsIgnoreCase(curse)) 你可以使用简单的for loop

 for(int i=0;i<curse.length;i++){
    if (event.getMessage().equalsIgnoreCase(curse[i])){
        event.setCancelled(true);
    player.sendMessage("Don't Swear");
    }
 }

或者您可以使用enhanced for loop来检查值

for(String s:curse){
  if (event.getMessage().equalsIgnoreCase(s)) {
    event.setCancelled(true);
    player.sendMessage("Don't Swear");
 }
}

答案 2 :(得分:0)

继续使用user2089674建议的内容。

我想你想要过滤掉包含诅咒词的消息,所以不使用equalsIgnoreCase而是使用contains?

那是

for (String c : curse) {

  if(event.getMessage().contains(c)){
       ......punish bad players..
     }
}

答案 3 :(得分:0)

之前已经说过,但我们的想法是method signature for String.equalsIgnoreCase()不接受String[]作为参数。

仔细观察 - 您可能有String[],但这与String不同。想想它,因为你需要花1美元才能使用自动售货机,但你只需20美元 - 它不会起作用。

因此,您需要遍历该数组的所有元素并通过equalsIgnoreCase提供它们。

以下是三种方法:

  1. 一个简单的for循环

    for(int i = 0; i < curse.length(); i++) {
        if(curse[i].equalsIgnoreCase(event.getMessage()) {
            // logic
        }
    }
    
  2. enhanced for循环

    for(String badWord : curse) {
        if(badWord.equalsIgnoreCase(event.getMessage()) {
          // logic
        }
    }
    
  3. 通过Arrays.asList(T... a)将数组转换为List集合,并使用Iterator<String>迭代它们

    List<String> badWords = Arrays.asList(curse);
    Iterator<String> badWordIterator = badWords.iterator();
    while(badWordIterator.hasNext()) {
        if(badWordIterator.next().equalsIgnoreCase(event.getMessage())) {
            // logic
        }
    }
    

答案 4 :(得分:0)

你不能用 String[] 做到这一点。像这样遍历它(最好使用增强的 for 循环):


    for (String curse : curses) {
    } 

并在循环内放置您的支票:

    for (String c : curse) {
        if (event.getMessage().equalsIgnoreCase(c)) {
            event.setCancelled(true);
            player.sendMessage("Don't Swear");
        }
    }

所以你遍历字符串数组(因此你得到数组中每一项的结果),然后检查迭代的项是否等于发送的消息。顺便说一下,我建议在 spigotmc.org 上提出这些问题,因为 stackoverflow 不欢迎新人使用。