equalsIgnoreCase bei ArrayList

EinsteigerxD

Mitglied
Hey Leute,
ich programmieren zur Zeit eine Blacklist (Wörter, die man nicht schreiben kann) in Minecraft.
Diese Wörter sind alle in eine ArrayList namens blocked.
Wenn ich nun blocked.add("Beispiel"); mache, kann man zwar Beispiel nicht schreiben, aber BEISPIEL oder BEIspiel.
Kann man diese Wörter irgendwie mit equalsIgnoreCase adden oder so etwas in der Art?
Habe schon gegoogelt aber nichts hilfreiches gefunden.

Lg EinsteigerxD
 
Moin,
Kann man diese Wörter irgendwie mit equalsIgnoreCase adden oder so etwas in der Art?
Habe schon gegoogelt aber nichts hilfreiches gefunden.
Hinzufügen wohl kaum ... es sei denn Du würdest ALLE möglichen Varianten speichern (also: beispiel, Beispiel, bEispiel, BEspiel usw.), was aber natürlich Blödsinn wäre!
Wertest Du denn diese Blacklist selbst aus??
Dann könntest Diu ja dort mit "IgnoreCase" arbeiten ...
Gruß Klaus
 
Du könntest die Wörter beim adden mittels toUpperCase oder toLowerCase alle klein oder alle groß schreiben lassen. Beim überprüfen musst du das zu überprüfende Wort natürlich auch umwandeln 🙂

Gruß Robert
 
Hier der Code:
Code:
    @EventHandler
   public void onChat(AsyncPlayerChatEvent e){
       Player player = e.getPlayer();
       String msg = e.getMessage();
       List<String> blocked = new ArrayList<String>();
       blocked.add("Arsch");
       blocked.add("Beispiel");
       
       for(String block : blocked){
           if(msg.contains(block)){
           
               e.setCancelled(true);
               player.sendMessage("§4Achte auf deine Wortwahl!");
           }
       }
       
       
       
   }

Ich möchte halt Beleidigungen wie "Arsch", "ARSCH", "ARsch" etc. sperren.
 
Da gibt es mehrere Möglichkeiten. Robats wäre eine. Die zweite wäre eine Klasse MyString schreiben, die als Attribut ein String enthält und von der die equals- und hash-Funktion überschrieben wird. Dritte, falls es nicht unbedingt eine Liste sein muss, ein TreeSet nehmen mit eigenem Comparator. Dann wären die Einträge zusätzlich sortiert.

@VfL_Freak: dann muss man aber vorm adden immer selbst durch die Liste iterieren und kann nicht contains verwenden.

Lg kevin

Ps: ich bin gerade am Handy, kann deshalb den Code nicht kopieren, aber da ists am besten was robat sagte. Msg und die Strings in der Liste einfach mit toLowerCase umwandeln.
 
Zuletzt bearbeitet:
Mit toLowerCase:
Java:
    @EventHandler
   public void onChat(AsyncPlayerChatEvent e){
       Player player = e.getPlayer();
       String msg = e.getMessage().toLowerCase();
       List<String> blocked = new ArrayList<String>();
       blocked.add("arsch");
       blocked.add("beispiel");
      
       for(String block : blocked){
           if(msg.contains(block)){
          
               e.setCancelled(true);
               player.sendMessage("§4Achte auf deine Wortwahl!");
           }
       }
      
      
    
   }

Aber ein Nutzer kann doch auch schreiben: "Den Marsch blasen"
Der String enhtält "arsch". Wird er dann auch zensiert?
 
Aber ein Nutzer kann doch auch schreiben: "Den Marsch blasen"
Der String enhtält "arsch". Wird er dann auch zensiert?
Also, ich persönlich würde die msg splitten und jedes Wort in eine temporäre ArrayList packen. Dann kann mit contains gearbeitet werden, ohne dass zum Beispiel "Marsch" zensiert wird
Aber, was ein Problem sein könntte, wäre die Benutzung von Füllzeichen, also "A rsch" oder "A.rsch"
MfG
Snakay aka Jonas
 
Mit toLowerCase:
Java:
    @EventHandler
   public void onChat(AsyncPlayerChatEvent e){
       Player player = e.getPlayer();
       String msg = e.getMessage().toLowerCase();
       List<String> blocked = new ArrayList<String>();
       blocked.add("arsch");
       blocked.add("beispiel");
     
       for(String block : blocked){
           if(msg.contains(block)){
         
               e.setCancelled(true);
               player.sendMessage("§4Achte auf deine Wortwahl!");
           }
       }
     
     
   
   }

Aber ein Nutzer kann doch auch schreiben: "Den Marsch blasen"
Der String enhtält "arsch". Wird er dann auch zensiert?
Bei toLowerCase wird doch das ganze Wort in kleiner case geschreiben oder?
 
Bei toLowerCase wird doch das ganze Wort in kleiner case geschreiben oder?
Ja der ganze String wird in lowerCase umgewandelt.

Anstatt den String als direkt als lowerCase zu speichern würden ich ihn nur beim Überprüfen umwandeln 😉
if (msg.toLowerCase().contains(block)) { somit bleibt die ursprüngliche Schreibweise erhalten und es wird trotzdem gefiltert.
 

Neue Themen


Zurück
Oben