Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > String nach bestimmten Inhalt untersuchen
Antwort
 
Themen-Optionen
Alt 25.02.2005, 21:57   Nach oben    #1
Quakes
Gast
 
Beiträge: n/a
Standard String nach bestimmten Inhalt untersuchen

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 bin ein java anfänger
mfg
Quakes
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 00:00   Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

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("<");
Danach durchsuchst Du, z.B. mittels
Code:
msgs[i].split("registrierung>")
und bekommst somit Deinen Namen.

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
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 05:40   Nach oben    #3
mic_checker
Gast
 
Beiträge: n/a
Standard

[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?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 10:03   Nach oben    #4
bluelight
Gast
 
Beiträge: n/a
Standard

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
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 10:50   Nach oben    #5
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

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
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 12:36   Nach oben    #6
Quakes
Gast
 
Beiträge: n/a
Standard

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 Kann mir das jemand erklären, oder eine Link mir Infos zur methode split() geben ?
mfg
Quakes
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 12:47   Nach oben    #7
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

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("<");
gibt Dir bei Deinem obigen Beispiel also folgendes zurück:
Code:
msgs[0] = <registrierung>Horst
msgs[1] = <pw>test
Somit hast Du erst einmal alle Befehle in einem Array.
__________________
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
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 13:29   Nach oben    #8
Quakes
Gast
 
Beiträge: n/a
Standard

Hi,
vielen Dank, glaub ich habes es verstanden und bin nun ein großes Stück weiter
Dann werd ich mich mal wieder am Code weiterschreiben und gucken ob alles geht, wie ich es mir vorgestellt habe.
mfg
Quakes
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 13:37   Nach oben    #9
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

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
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 17:50   Nach oben    #10
Quakes
Gast
 
Beiträge: n/a
Standard

ein glück das ich anfänger dabei geschrieben hab, sonst wer mir sowas entgangen *g*

nein kannte ich noch nicht
Vielen Dank

mfg
Quakes
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 19:48   Nach oben    #11
Quakes
Gast
 
Beiträge: n/a
Standard

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 hab in der Hilfe nachgeschaut, da gab's die auch nicht, also hab ich wohl ne zualte Version
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];
    
  }
Hoffe ihr könnt mir auch diese Mal weiterhelfen
mfg
Quakes
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 20:01   Nach oben    #12
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

Hi,

Split schreib man nur mit einem 't'. Desweiteren musst Du den StringTokenizer auch includen (was für ein Wort), sprich am Anfang Deiner Klasse muss ein
Code:
include java.util.StringTokenzier;
zu finden sein.
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
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 20:10   Nach oben    #13
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

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
        }
    }
}
Du kannst den Code entsprechend anpassen, wenn Du schon weißt, in welcher Reihenfolge die Daten kommen. Allerdings macht jede Anpassung das Programm dann weniger resistent gegen fehlerhafte Strings.
__________________
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
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 20:29   Nach oben    #14
Quakes
Gast
 
Beiträge: n/a
Standard

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
{...
also da eingefügt, wo die andern import Sachen sind, nur leider bekomme ich da die Fehlermeldung "kein Zugriff auf Klasse java.util.StringTokenzier; Klasse java.util.StringTokenzier wurd nicht in stabilem Packet gefunden"
mfg
Quakes
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 21:26   Nach oben    #15
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

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
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 22:42   Nach oben    #16
mic_checker
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Quakes
hab leider kp wo dieses include hinkommt
Java != C etc.

-> import statt #include

ps. hast im source ja import geschrieben , wollt dich nur nochmal drauf hinweisen das es in java nicht include heisst...
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.02.2005, 11:57   Nach oben    #17
Quakes
Gast
 
Beiträge: n/a
Standard

Hi,
vielen Dank für die Info Hab mir sowas auch schon gedacht.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.03.2005, 14:43   Nach oben    #18
Quakes
Gast
 
Beiträge: n/a
Standard

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";
  }
Nur das Problem ist, wenn die Methode einen Wert bekommt, z.b. "<reg>tests<pw>fsdfdfd" gibt es eine Fehler
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 nur welcher ???

Hoffe ihr könnt mir weiterhelfen

mfg
Quakes
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.03.2005, 15:08   Nach oben    #19
pago
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

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.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.03.2005, 15:21   Nach oben    #20
Quakes
Gast
 
Beiträge: n/a
Standard

Hi,
und wie mach ich das, dass dass Array 4 Strings aufnehmen kann ? (also von der Syntax) ?
mfg
Quakes
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen