BufferedInputStream nur bestimmte Zeichen

dior

Bekanntes Mitglied
Hallo,

ich habe ein kleines Programm (über BufferedInputStream) welches mir alle Zeilen einer Textdatei ausliest.
ich habe es mit .trim(4) auch geschafft das er mir die ersten 4 "unnötigen" Zeichen nicht mit ausliest.

Aber wie kann ich ab einer bestimmten Stelle oder besser noch sobald die erstel Leerzeichen beginnen abschneiden?


Ausgangsdatei Format:

001 A1 5214552 452214
002 B2 6565514 315513
003 S2B 6515151 111141


Aktuelle Ausgabe:

A1 5214552 452214
B2 6565514 315513
S2B2 6515151 111141


gewünschte Ausgabe:

A1
B2
S2B2


:rtfm:
 
schonmal danke für die 2 antworten...

aber in meinem Fall habe ich probiert für bis. gibt es kein substring....

Java:
try {
            fis = new FileInputStream(file);

            // Here BufferedInputStream is added for fast reading.
            bis = new BufferedInputStream(fis);
            dis = new DataInputStream(bis);
            
            // dis.available() returns 0 if the file does not have more lines.
            while (dis.available() != 0) {
                bis.skip(4);   // lässt die ersten 4 Stellen in jeder zeile aus!!
                
              System.out.println(dis.readLine());
            }
 
Ach ja genau... danke so funktioniert es 🙂

Danke


Java:
String test = dis.readLine();
System.out.println(test.substring(0, 10));


Aber noch eine Zusatzfrage: kann ich irgendwie sagen das er beim 1. Leerzeichen abschneidet und nicht so wie jetzt immer nach dem 10. Zeichen?
 
Ja, erstmal die Position des Leerzeichens ermitteln. Dafür gibt es auch eine String-Funktion. Sie heißt indexOf(). Dann diesen Wert für substring benutzen.
 
Ich glaube nicht, dass "er" in deinem Fall mit dem 10. Leerzeichen abschneidet. Substring macht nichts anderes, als die Teilzeichenkette zwischen zwei char-Positionen zurückzugeben, das sind nicht notwendigerweise Leerzeuchen... (in deinem Fall dürfte das für die erste Zeichenkette das Zeichen "1" sein, wenn ich richtig gezählt hab).
 
Willst du es so haben?

Java:
import java.io.*;
public class Test {

	public static void main(String[] args) {
		
		Test test = new Test();
		System.out.println(test.zerschnippel("Hallo mein Name ist Fabian."));
		System.out.println(test.zerschnippel("Das ist ein blaues Haus."));
		
	}
	
	public String zerschnippel(String param) {
		 return param.substring(param.indexOf(' ')+1,param.length()); // +1 damit die Leerzeichen auch weggeschnitten werden.
		}
}

alles vor dem ersten Leerzeichen und das Leerzeichen werden weggeschnitten.
 
Der Umgang mit den InputStreams ist unbrauchbar. Von hier kopiert? (Wie kann das nur so positiv bewertet worden sein?)

[japi]java.io.DataInputStream#readLine()[/japi] ist deprecated.
Ein Zeichen kann aus mehreren Bytes bestehen. Das ist ein Grund, wieso die Verwendung von [japi]java.io.BufferedInputStream#skip(long)[/japi] nicht korrekt ist. Der andere lässt sich der Doku leicht entnehmen: Es werden nicht zwingend so viele Bytes übersprungen wie mitgegeben.

Zum Lesen von textuellen Daten nimmt man einen [japi]java.io.Reader[/japi].

Die Streams werden nicht korrekt geschlossen. [japi]java.io.InputStream#close()[/japi] gehört in einen finally-Block.
 
Danke Xhepuk, ich habe es jetzt auch mit Reader umgebaut.

Aber ich habe noch ein Problem:
egal ob mit Variante 1 oder Variante 2, er liest mir immer nur jede 2. Zeile aus der Textfile aus... :autsch:


Edit: hat sich erledigt... mein fehler 🙂
 
Zuletzt bearbeitet:

Zurück
Oben