Wort im Satz erkennen und ändern

Dieses Thema im Forum "Programmierung" wurde erstellt von Mrcookie008, 10. Juli 2013.

  1. Mrcookie008
    Offline

    Mrcookie008

    Registriert seit:
    15. Dezember 2011
    Beiträge:
    380
    Ort:
    /home
    Minecraft:
    xCookieZz oder Mrcookie008 (Beides Premium)
    Hallo,
    ich versuche gerade, dass mein Plugin in einem Satz ein bestimmes Wort erkennt und dieses ändert.

    Dasshier habe ich bisher:

    Code (Text):
    1.     @EventHandler    public void onPlayerYolo(AsyncPlayerChatEvent e)
    2.     {
    3.       Player p = e.getPlayer();
    4.       String y = e.getMessage().toLowerCase();
    5.       if ((y.contains("Server"))) {
    6.           p.sendMessage("§6Deine Nachricht enthielt §e'Server'");
    7.                   // Das p.sendMessage war zum Testen da.
    8.        
    9.         }
    10.       }


    Ich möchte jetzt aber, dass er die Nachricht ändert z.B zu "§6§lServer" oder soetwas,
    ich habe das schon mit "replace" getestet, hat abernicht ganz hingehauen..

    hätte jemand da ein Stück Code oder eine Erklärung?

    LG der Javaanfänger ;).
     
    #1
  2. Hecke29
    Online

    Hecke29

    Ich hab kaum Ahnung von Java, aber:

    Code (Text):
    1.     @EventHandler    public void onPlayerYolo(AsyncPlayerChatEvent e)
    2.     {
    3.       Player p = e.getPlayer();
    4.       String y = e.getMessage().toLowerCase();
    5.       if (y.contains("Server")) {
    6.              y.replace("Server", "Haus");
    7.         }
    8.       }
    Müsste das nicht ausreichen? :confused:
     
    #2
  3. Plugin00
    Offline

    Plugin00

    Registriert seit:
    3. Februar 2013
    Beiträge:
    71
    Hm, ich habe kurz mal was gemacht. Aber ich habe es nicht getestet...

    Code:
    Code (Text):
    1.  
    2.     @EventHandler
    3.     public void onPlayerChatEvent(AsyncPlayerChatEvent ev) {
    4.  
    5.         Player pl = ev.getPlayer();
    6.         String message = ev.getMessage().toLowerCase();
    7.        
    8. [COLOR="#FF0000"]       if (!pl.isOp()) {
    9.             ev.setMessage(message);[/COLOR]
    10.             if (message.contains("server")) {
    11.                 pl.sendMessage("§6Deine Nachricht enthielt §e'Server'");
    12.                 ev.setCancelled(true);
    13.                 ev.setMessage(message.replaceAll("§6server", "server"));
    14.             }
    15. [COLOR="#FF0000"]       }[/COLOR]
    16.     }
    //Was Rot ist kannste löschen, Es ist nur aus meinen Plugin..
     
    #3
  4. Baba43
    Offline

    Baba43 Ehem. Teammitglied

    Registriert seit:
    5. November 2012
    Beiträge:
    589
    Das contains kann man sich natürlich sparen.

    Nach toLowerCase lohnt es auch nicht eine Methode wie contains mit Großbuchstaben zu verwenden ^^
     
    #4
  5. Sn0wBlizz4rd
    Offline

    Sn0wBlizz4rd

    Registriert seit:
    26. September 2012
    Beiträge:
    424
    Minecraft:
    Sn0wBlizz4rd
    Nutze einfach:
    Code (Text):
    1. event.setMessage(event.getMessage().replaceAll("Server", "§b§lServer"));
     
    #5
  6. Mrcookie008
    Offline

    Mrcookie008

    Registriert seit:
    15. Dezember 2011
    Beiträge:
    380
    Ort:
    /home
    Minecraft:
    xCookieZz oder Mrcookie008 (Beides Premium)
    Vielen dank an euch alle =)

    Falls es zukünftigen Leuten helfen sollte, hier die Lösung:

    Code (Text):
    1. package EventHandler;
    2.  
    3. import org.bukkit.entity.Player;
    4. import org.bukkit.event.EventHandler;
    5. import org.bukkit.event.Listener;
    6. import org.bukkit.event.player.AsyncPlayerChatEvent;
    7.  
    8.  
    9. public class ChatTester
    10.   implements Listener
    11. {
    12.     @EventHandler
    13.     public void onPlayerChatEvent(AsyncPlayerChatEvent ev) {
    14.  
    15.  
    16.         Player pl = ev.getPlayer();
    17.         String message = ev.getMessage().toLowerCase();
    18.        
    19.             if (message.contains("Server")) {
    20.                 pl.sendMessage("§6Deine Nachricht enthielt §e'Server'");
    21.                 ev.setMessage(ev.getMessage().replaceAll("server", "§r§b§lServer§r"));
    22.             }
    23.         }
    24. }

    LG und vielen dank :).
     
    #6
  7. Plugin00
    Offline

    Plugin00

    Registriert seit:
    3. Februar 2013
    Beiträge:
    71
    Wenn man es ohne "contains" macht, kommen dan nicht eig. Fehler? oder ist das nicht so?

    Code (Text):
    1. event.setMessage(event.getMessage().replaceAll("Server", "§b§lServer"));
     
    #7
  8. TimBone
    Online

    TimBone

    (?i) *zehnzeicheb*
     
    #8
  9. games6471
    Online

    games6471

    Timbone, du weisst schon, dass contains case sensitive ist?
     
    #9
  10. TimBone
    Online

    TimBone

    Einfach bei jedem ChatEvent nur das Replaceall verwenden.
     
    #10
  11. games6471
    Online

    games6471

    Da ich vermute, dass du noch Anfänger im Bereich regulären Ausdrücken bist, glaube ich dass du die Methode replaceAll irtürmlicherweise gewäwlt hast. ReplaceAll arbeitet nämlich mit regülaren Ausdrücken, da kann es leicht mal zu Fehlern kommen, wenn man dies nicht weiss.

    Die normale Methode replace nämlich ersetzt schon alle Stellen mit dem über dem zweiten Parameter festgelegten String. Hierbei wird kein regulärer Ausdruck angwendet. Ich garantiere dir aber, dass regulärer Ausdrücke auch sehr sinnvoll sind und du dir die später auf jeden Fall anschauen und lernen solltest. Schließlich ist es nicht nur in Java vertreten.
     
    #11