-5

当我制作一个equalsIgnorecase无法识别的字符串数组时,在eclipse中它建议我将数组更改为其他内容,反之亦然。

  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");
     }
 }
}

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

4

5 回答 5

1

你需要循环遍历诅咒来检查每一个。

for (String c : curse) {
  ... do check ...
}
于 2013-02-20T04:56:37.840 回答
1

继续 user2089674 的建议。

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

那是

for (String c : curse) {

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

于 2013-02-20T05:04:16.503 回答
1

之前已经说过,但想法是方法签名String.equalsIgnoreCase()不接受 aString[]作为参数。

仔细看一下 - 你可能有一个String[],但这与String. 把它想象成你需要一张 1 美元的钞票才能使用自动售货机,但你只有 20 美元——这行不通。

因此,您需要遍历该数组的所有元素并将它们提供给equalsIgnoreCase.

以下是三种方法:

  1. 一个简单的for循环

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

    for(String badWord : curse) {
        if(badWord.equalsIgnoreCase(event.getMessage()) {
          // logic
        }
    }
    
  3. 将数组转换为 List 集合Arrays.asList(T... a)并使用 anIterator<String>对其进行迭代

    List<String> badWords = Arrays.asList(curse);
    Iterator<String> badWordIterator = badWords.iterator();
    while(badWordIterator.hasNext()) {
        if(badWordIterator.next().equalsIgnoreCase(event.getMessage())) {
            // logic
        }
    }
    
于 2013-02-20T05:09:59.143 回答
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");
 }
}
于 2013-02-20T04:57:55.610 回答
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。

于 2021-06-05T10:38:22.697 回答