当我创建一个字符串数组时,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");
}
}
}
这是我的视频游戏的诅咒过滤器。我做错了什么?
答案 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
提供它们。
以下是三种方法:
一个简单的for循环
for(int i = 0; i < curse.length(); i++) {
if(curse[i].equalsIgnoreCase(event.getMessage()) {
// logic
}
}
for(String badWord : curse) {
if(badWord.equalsIgnoreCase(event.getMessage()) {
// logic
}
}
通过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 不欢迎新人使用。