Java: StringTokenizer, Delimiterausgabe

Diskutiere Java: StringTokenizer, Delimiterausgabe im Developer Network Forum im Bereich Hardware & Software Forum; Hi, z.Z entwicke ich ein Programm was einen Sting einließt und als Delimiter "|" verwendet. import java.io.BufferedReader; import...
  • Java: StringTokenizer, Delimiterausgabe Beitrag #1
K

Kdell

Mitglied
Dabei seit
17.03.2006
Beiträge
11
Reaktionspunkte
0
Hi,

z.Z entwicke ich ein Programm was einen Sting einließt und als Delimiter "|" verwendet.


Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Felder2 
{
		public static void main (String[] args) throws IOException
	  {
	    InputStreamReader inStream =				//
	        new InputStreamReader( System.in ) ;
	    BufferedReader reader1 =
	        new BufferedReader( inStream );

	   String inData;
	   
	   System.out.println("Eingabe:");
	    inData = reader1.readLine(); 
	    Tokenize(inData);
	  }

	    public static void Tokenize (String inData)
	  {
		
		StringTokenizer tokenizer = new StringTokenizer( inData , "|");
		while ( tokenizer.hasMoreTokens() )
		  System.out.println( tokenizer.nextToken() );			
	  }	
}

Die Eingabe soll ungefähr so aussehen: Bla|Bla2||Bla4
Die Ausgabe soll dann so aussehen:
Bla
Bla2
LEER
Bla4

Wie ihr seht soll das Programm in der Lage sein den "freien" PLatz auch auszugeben.

Ich hab nur leider keinen Schimmer wie ich die While-Schleife so umgebaut bekomme.

Wenn ihr mir weiter helfen könntet wär das echt super :).

MFG
 
  • Java: StringTokenizer, Delimiterausgabe Beitrag #2
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Was macht der Code denn jetzt? Gibt er eine Leerzeile aus? Oder gibt's eine Null Pointer Exception?
Wenn ja, dann speicherst Du das Ergebnis von
tokenizer.nextToken() erstmal in einer Variable und prüfst, ob sie null ist oder ob es ein leerer String ist. Also:

Code:
String tmp = tokenizer.nextToken();
System.out.println((tmp == null || tmp.length == 0) ? "LEER" : tmp);
 
  • Java: StringTokenizer, Delimiterausgabe Beitrag #3
K

Kdell

Mitglied
Dabei seit
17.03.2006
Beiträge
11
Reaktionspunkte
0
Der Code würde bei dem angegebenen Bsp.

Bla1
Bla2
Bla4

ausgeben, also den Dimiter komplett veschlucken.

Wenn ich versuche den String temporär zu speichern
bekomme ich eine Fehlermeldung:
Code:
Exception in thread "main" java.util.NoSuchElementException
	at java.util.StringTokenizer.nextToken(Unknown Source)
	at Felder2.Tokenize(Felder2.java:30) //


Hier noch mal die geänderte Funktion

Code:
 public static void Tokenize (String inData)
	  {
		
		StringTokenizer tokenizer = new StringTokenizer( inData , "|");
		while ( tokenizer.hasMoreTokens() )
		
		  System.out.println( tokenizer.nextToken() );	
		String tmp = tokenizer.nextToken();     //in der Zeile ist der Fehler
		System.out.println((tmp == null || tmp.length() == 0) ? "LEER" : tmp);	
	  }


MFG
 
  • Java: StringTokenizer, Delimiterausgabe Beitrag #4
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Der Tokenizer kann das leider so nicht. Ich hab mal schnell was zusammengeschrieben:
Code:
        String    text    = "a|b||d";
        char    delim     = "|";
        
        int     i = 0;
        int     j = 0;
        String     s = "";
        
        while (j < text.length()) {
            if (text.charAt(j) == delim) {
                s = text.substring(i, j);
                System.out.println(s.length() == 0 ? "LEER" : s);
                i = ++j;
            }
            else
                j++;
        }
        s = text.substring(i, j);
        System.out.println(s.length() == 0 ? "LEER" : s);
Daraus kannst Du auch deinen eigenen Tokenizer bauen oder den Code gleich direkt so benutzen.
 
  • Java: StringTokenizer, Delimiterausgabe Beitrag #5
K

Kdell

Mitglied
Dabei seit
17.03.2006
Beiträge
11
Reaktionspunkte
0
Danke
das Programm funktioniert nun :)

:app: :app: :app:


MFG
 
  • Java: StringTokenizer, Delimiterausgabe Beitrag #6
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen,

ist vielleicht ein bischen spaet fuer 'na Antwort in diesem Thread aber den StringTokenizer benutzt man eigentlich nicht mehr. Hier mal 'ne Kurzversion fuer das was Du haben willst:

Code:
String text = "a|b||d";
String[] tokenizedText = text.split("\\|");
        
for (int i=0; i<tokenizedText.length; i++)
{
    System.out.println(tokenizedText[i]);
}
Das Resultat waere:

Code:
a
b

d

Gruss, FFNB.
 
Thema:

Java: StringTokenizer, Delimiterausgabe

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben