Substring - String index out of range

stoi

Mitglied
Hallo,

ich benutze Substring um eine ausgelesene Zeile zu splitten.

Java:
package filereader;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Test {
	public static void Test(){
		try {
			BufferedReader in = new BufferedReader(new FileReader("ALL4500.txt"));
			String zeile = null;
			String Datum = "";
			String Sensor1 = null;
			while ((zeile = in.readLine()) != null) {
				//System.out.println(zeile);
				Datum = zeile.substring(0,8);
				System.out.println(Datum);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String [] args){
		Test();
	}

}

von substring(0,7) funktioniert alles super, aber ab substring(0,8) kommt eine Exception.
String index out of range: 8
Wieso?

Viele Grüße
stoi
 
Desweiteren habe ich eine Textdatei mit ca. 4500 Zeilen.
Wenn ich die Textdatei auslese, werden nur ca. die letzten 50 Zeilen angezeigt...
Ich möchte die Textdatei auslesen und in eine Objektdatenbank speichern..

Wieso werden nicht alle Zeilen ausgelesen?

MfG
stoi
 
Du hast weder den Aufbau der Txt-Datei erläutert noch sonstige Informationen eingestellt, wie sollen wir dir jetzt sagen wieso Substring schief läuft? Der String wird nicht lang genug sein...Was gibt denn Zeile 15 aus wenn du die Zeile ausgeben lässt?

Desweiteren habe ich eine Textdatei mit ca. 4500 Zeilen.
Wenn ich die Textdatei auslese, werden nur ca. die letzten 50 Zeilen angezeigt...
Ich möchte die Textdatei auslesen und in eine Objektdatenbank speichern..

Wieso werden nicht alle Zeilen ausgelesen?

Vlt. siehst du einfach nur die letzten 50 Zeilen, die anderen siehst du einfach nicht mehr in deiner Konsole...Testweise könntest du die Objekte erst einmal in eine Liste einfügen solange dein Datenbank-Code noch nicht funktioniert und prüfen wie viele Objekte dann deine Liste hat
 
Sorry era,
hier weitere Informationen.

Also ich habe Testweise schon Daten in die Objektdatenbank eingefügt, das sind leider nur diese 50 Zeilen, und nicht alle (einfach mit einer While Schleife in die DB geschrieben).

Also das ist eine CSV Datei,
in einer Zeile sind bestimmt über 100 Zeichen.
Die Textdatei sieht ungefähr so aus.

2013-10-20;15:54:13;23.37;28.56;13.50;22.62;14.00;37.00;20.68;18.00;82.75;5.94;0.50; .....

und davon über 4000 Zeilen.

Und hier zeige ich dir mal, wie ich das in die Datenbank geschrieben habe.

Java:
	public static void auslesen(ObjectContainer db){
		try {
			BufferedReader in = new BufferedReader(new FileReader("ALL4500.txt"));
			String zeile = null;
			String Datum = "";
			String Datum2 = "";
			String Sensor1 = null;
			while ((zeile = in.readLine()) != null) {
				//System.out.println(zeile);
				Datum = zeile.substring(0,7);
				System.out.println(Datum);
		        Pilot pilot1 = new Pilot(Datum, 100);
		        db.store(pilot1);
		        System.out.println("Stored " + pilot1);
		        pilot1 = null;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
}

und noch ein Screenshot wie das in der DB und in der Textdatei aussieht.
 

Anhänge

  • csv.jpg
    csv.jpg
    125,6 KB · Aufrufe: 42
Zuletzt bearbeitet:
Ok und jetzt bitte noch einmal genau erklären was du splitten möchtest, bzw. was du herausziehen willst.
Substring 0,7 gibt dir ja 2013-10, wieso willst du 0,8 ? Das wäre ja dann 2013-10- ? Für mich erst einmal unverständlich, 0,10 wäre verständlicher. Und auch beachten dass deine csv-Datei noch eine Zeile mit Überschriften hat, die liest du zur Zeit mit ein?
Und wie ist der Screenshot mit dem Auszug aus der DB erstellt worden? Alles noch ungeklärte Details 🙂
 
Hehe,

also natürlich möchte ich nicht nur substring(0,8), sondern das Datum filtern, und die einzelnen Temperaturwerte... diese wären dann auch z.B. (11,14) ... oder (15,18)...
Aber irgendwie kann ich nur von (0,7) lesen, ab dem 9. Char gibts dann eine Exception.

Das er die erste Zeile mitliest, ist mir erstmal egal, ich kann bestimmt irgendwie schreiben, das er erst ab der 2. Zeile lesen soll.

Den Screenshot hab ich mit meinem Snipping Tool gemacht ;-)

In Eclipse hab ich die OME View... und von dort aus auf meine Objektdatenbank db4o zugegriffen...
und dann halt alles anzeigen lassen...

wie gesagt, irgendwie kann eine Zeile nur von (0,7) gelesen werden, und maximal 50 Zeilen, oder sogar weniger, werden angezeigt bzw. gespeichert.

Für mich ein Rätsel, weil ich das alles in die Schleife gepackt habe
 
also das mit der Datenbank habe ich gelöst, da war die Ansicht einfach nur auf 50 beschränkt... 🙂
Aber jetzt habe ich immer noch das Problem mit dem Substring..
 
Bevor du ein zeile.substring(0,7); bzw Probleme in ein Forum postest. Warum überprüfst du nicht einfach die länge deines strings?
 
Nochmal zu deiner Frage, falls du es selbst machen willst -
substring ist hier definitiv nicht die richtige Lösung. Versuch mal line.split(";"), das teilt die Zeile auf in lauter "substrings", die durch ";" getrennt sind. Dein Datum wäre dann also line.split(";")[0], der Wert rechts davon line.split(";")[1], etc...
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben