![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Gast
Beiträge: n/a
|
Hi,
ich habe folgendes Problem bei einem Chatprogram ich bekomme über UDP einen String dieser String soll aber verschieden weiterverabeitet werden, je nach dem was im String steht. Hier mal ein Beispiel: "<registrierung>Horst<pw>test" (Inhalt des Strings) Das <registrierung> soll dem Programm zeigen das es nun eine Methode einleiten soll, die die Registrierung abwickelt. "<Werner> Hallo tolle Site" Das ist aber eine Normale Chatnachricht von "Werner" woraufhin nichts passieren soll. Kann mir jemand den Befehl sagen, wie ich einen String auf "<registrierung>" untersuchen kann ? und vielleicht noch einen Tip geben, wie ich aus dem ganzen String den Namen des zu registrierenden (im Bsp. "Horst") sowie sein pw in verschiedene Strings aufteilen kann ? Falls ich mich seltsam Ausgedrück habe sry mfg Quakes |
|
|
|
Nach oben #2 |
|
Chefkoch-Mod
Registriert seit: 30.05.2004
Beiträge: 433
|
Hi,
ich würde den String splitten. Du suchst am besten zunächst nach allen "<", damit du den alle Befehle in einem Array hast: Code:
String[] msgs = udp-msg.split("<");
Code:
msgs[i].split("registrierung>")
Vielleicht gibt es aber auch was Eleganteres.
__________________
Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
|
|
|
|
|
Nach oben #3 |
|
Gast
Beiträge: n/a
|
[quote=Quakes]
Kann mir jemand den Befehl sagen, wie ich einen String auf "<registrierung>" untersuchen kann ? /QUOTE] Willst du wissen ob ein best. String in einem andern String vorkommt? Das ginge mit indexOf(...), wobei Rückgabewert Auskunft darüber gibt ob der String enthalten ist (!= -1) oder nicht (==-1). Oder was willst du? |
|
|
|
Nach oben #4 |
|
Gast
Beiträge: n/a
|
Du kannst es ja mal mit einem String tokenizer versuchen:
[JAVA] String s = "der zu verarbeitende Text"; StringTokenizer t = new StringTokenizer(s); while(t.hasMoreTokens()) { if((t.nextToken()).equals("<regestrierung>")) { mache etwas; } } [/JAVA] In jdk 5.0 kannst du in der if anweisung statt (t.nextToken()).equals("regestrierung") auch (t.nextToken()).contains("regestrierung") verwenden |
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 29.05.2004
Beiträge: 228
|
Da währen wohl auch Reguläre Ausdrücke noch nützlich: http://java.sun.com/j2se/1.5.0/docs/...va.lang.String)
MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM "We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth |
|
|
|
|
|
Nach oben #6 |
|
Gast
Beiträge: n/a
|
Hi an alle die mir hier gepostet haben
Vielen Dank mich mich auf dem Link von peschmae mal umgeschaut und das hier zusammengebaut. ------- if (incoming.startsWith("<registrierung>")) { .... } ------- so nun erkennt das Programm um was es sich handelt, nur wie bekomm ich den "namen" sowie das "pw" aus dem String herraus. Die Abschnitt mit dem split(), der von Sym angesprochen wurde scheint dazu geeignet zusein, nur leider versteh ich nicht wie dieser arbeitet mfg Quakes |
|
|
|
Nach oben #7 |
|
Chefkoch-Mod
Registriert seit: 30.05.2004
Beiträge: 433
|
Hallo,
die Methode String.split(regex) spaltet den String an den gegebenen Stellen und gibt ein Array von Strings zurück. Der Code Code:
String[] msgs = udp-msg.split("<");
Code:
msgs[0] = <registrierung>Horst msgs[1] = <pw>test
__________________
Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
|
|
|
|
|
Nach oben #9 |
|
Chefkoch-Mod
Registriert seit: 30.05.2004
Beiträge: 433
|
Dann mal viel Erfolg.
Du kennst die API, oder? Dort finde ich jedenfalls die Sachen meist am schnellsten
__________________
Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
|
|
|
|
|
Nach oben #11 |
|
Gast
Beiträge: n/a
|
Hi,
also ich hab nun das Problem erstmal hab ich das wie von Sym mit der Methode splitt() getestet, nur er findet die Methode splitt() nicht Dann hab ich's mit dem StringTokenizer versucht (wie von bluelight) beschrieben. Nur da bekomme ich die Fehlermeldung "Klasse StringTokenizer nicht gefunden in class ServerStart." ich benutzte JBuilder 2.0 und laut Hilfe ist der dort enthalten, nur muss ich den StringTokenizer noch implementieren oder sowas ??? Hier mein Quelltext davon: Code:
private void splittMessage ()
//Fehler !!! StringTokenizer wird nicht gefunden
{
int i = 0;
String splitt[]; //Array für die aufgeteilte Nachricht
StringTokenizer st = new StringTokenizer(incoming);
while (st.hasMoreToken())
{
splitt[i] = st.nextToken();
i++;
}
i = 0;
//splitt[0] is "<reg>"
regName = splitt[1];
//splitt[2] is "<pw>"
regPw = splitt[3];
}
mfg Quakes |
|
|
|
Nach oben #12 |
|
Chefkoch-Mod
Registriert seit: 30.05.2004
Beiträge: 433
|
Hi,
Split schreib man nur mit einem 't'. Code:
include java.util.StringTokenzier; Als letztes musst Du auch Dein Array initialisieren - oder am Anfang die Methode split anwenden.
__________________
Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
|
|
|
|
|
Nach oben #13 |
|
Chefkoch-Mod
Registriert seit: 30.05.2004
Beiträge: 433
|
Zum Beispiel so:
Code:
public void splitMessage() {
String[] splitMsg = this.incoming.split("<");
for(int i=0; i<splitMsg.length; i++) {
if(splitMsg[i].startsWith("registrierung") {
//mach was - z.B. wieder entsprechend splitten
} else if(Msg[i].startsWith("ps") {
//mach was anderes
}
}
}
__________________
Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
|
|
|
|
|
Nach oben #14 |
|
Gast
Beiträge: n/a
|
Hi,
also zum ersten Post von dir, hab leider kp wo dieses include hinkommt oder ist das import ? weil ich hab's mal so getestet Code:
...
import java.util.StringTokenzier;
public class ServerStart extends Frame implements ActionListener, Runnable
{...
mfg Quakes |
|
|
|
Nach oben #15 |
|
Erfahrener Benutzer
Registriert seit: 29.05.2004
Beiträge: 228
|
das heisst StringTokenizer nicht StringTokenzier (nichts geziert hier sondern getokenized
import java.util.* tuts auch. MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM "We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth |
|
|
|
|
|
Nach oben #18 |
|
Gast
Beiträge: n/a
|
Hi,
hab endlich wieder zeitgefunden an dem Teil weiterzubasteln Es sieht nun so aus. Code:
private void splitMessage ()
{
int i = 0;
String[] splitt = {}; //Array für die aufgeteilte Nachricht
System.out.println (incoming);
StringTokenizer st = new StringTokenizer(incoming);
statusArea.append ("starten mit Teilen des Strings");
while (st.hasMoreTokens())
{
statusArea.append ("schleife");
System.out.println (st.nextToken ());
splitt[i] = st.nextToken();
i++;
}
i = 0;
//split[0] is "<reg>"
regName = splitt[1];
//split[2] is "<pw>"
regPw = splitt[3];
//regName = "Testuser";
//regPw = "testpw";
}
Das letze was die Methode ausgibt ist "starten mit Teilen des Strings". Das bedeutet "while (st.hasMoreTokens()" oder eine damit zusammenhängender Teil stimmt nich Hoffe ihr könnt mir weiterhelfen mfg Quakes |
|
|
|
Nach oben #19 |
|
Projektleiter
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
|
Arrays sind in Java nicht dynamisch. Du kannst also einem Array in Java nur soviele Elemente zuweisen, wie du am Anfang festlegst.
In deinem Beispiel hat das Array eine Länge von 0, kann also keine Elemente aufnehmen. Was du möchtest ist aber vermutlich eher eine Liste.
__________________
Patrick Gotthardts Weblog. |
|
|
|