Überprüfung/Parsen eines Byte-Arrays

Sempah

Bekanntes Mitglied
Hallo zusammen,

ich hab den Inhalt einer CSV-Datei in einem Byte-Array (bzw. String) geladen und möchte nun den Inhalt überprüfen.

Aufbau der Datei:
Code:
Ueberschrift1;Ueberschrift2
A1;B1
A2;B2
A3;B3

Das Auslesen der Datei funktioniert, ich bekomme den Inhalt der Datei als byte-Array (also ASCII Werte mit CR, LR etc) bzw. wandle das Array in einen String um.

Ich möchte jedoch sicherstellen, dass in der Zeile1, Spalte1 "Ueberschrift1", in Zeile1, Spalte2 "Ueberschrift2" und in den folgenden Zeilen bspw. nur numerische Werte stehen.
Außerdem sollte nur 2 Spalten gefüllt sein und min. 2 Zeilen müssen gefüllt sein.

Variante1:
Zeichenweise durch das Byte-Array und dauerhafte Abfrage wann ein CR+LR kommt, wann ein ; kommt etc. -> sehr umständlich

Variante2:
Java:
		StringTokenizer tokenizer1 = new StringTokenizer(content);
		StringTokenizer tokenizer2 = null;
		int row = 0;
		int column = 0;
		String tmp = "";

		if (tokenizer1.countTokens() < 2) {
			throw new Exception("Es müssen mindestens 2 Zeilen gefüllt sein.");
		}
		
		while (tokenizer1.hasMoreTokens()) {
			row++;
			tokenizer2 = new StringTokenizer(tokenizer1.nextToken(), ";");
			
			if (tokenizer2.countTokens() > 2) {
				throw new Exception("Es sind mehr als 2 Spalten gefüllt.");
			}
			
			while (tokenizer2.hasMoreTokens()) {
				column++;
				
				tmp = tokenizer2.nextToken();
				
				if (row == 1) {
					if (column == 1) {
						if (!tmp.equals("Ueberschrift1")) {
							throw new Exception("Zeile 1, Spalte 1 != Soll, " + tmp);
						}
					} else if (column == 2) {
						if (!tmp.equals("Ueberschrift2")) {
							throw new Exception("Zeile 1, Spalte 2 != Soll, " + tmp);
						}
					} else {
						// ...
					}
				} else { // alles ab Zeile2
					// Ueberpruefung auf numerische Werte etc.
				}
				System.out.println(tmp);
			}
			column = 0;
		}
Hier wandle ich das Byte-Array in einen String um, und gehe die einzelnen Zeilen + Spalten mit 2 StringTokenizern durch. Diese Variante scheint mir schon ein wenig besser, jedoch auch nicht wirklich optimal zu sein.


Frage: Hätte jmd. einen besseren Vorschlag? (Die CSV-Datei steht mir zu diesem Zeitpunkt nicht mehr zur Verfügung, d.h. ich kann nicht mit einer CSV-Lib arbeiten.)
 
S

SlaterB

Gast
der Tokenizer-Code und if row = 1 else sind natürlich unschön, aber das kann man ja wegoptimieren, wenn man nur entsprechende Hintergrund-Klassen baut,
Gegenfrage: wie hättest du es denn gerne? irgendeine Art von Code muss da ja stehen

schreibe
Java:
CSVAnalyser x = ..;
check(x.rowCount() == 2, "Fehler xy");
check(x.rowIs(0,"Überschrift1","Überschrift2"), "Fehler xy");
for (int row = 1; row < x.rowCount(); row++) {
   Row r = x.getRow(row);
   check(r.size() == 2, "Fehler xy");
   check(r.containsOnlyNumber(), "Fehler xy"); // oder Schleife über Felder
}
fehlt nur ne Klasse CSVAnalyser, Row, check()-Methode usw ;)
die werden dann entsprechend komischen Code enthalten, der läßt sich nicht aus der Welt schaffen
 

Sempah

Bekanntes Mitglied
Thx erst mal, jo stimmt schon, dass der Code irgendwo hin muss. Ist wahrscheinlich am besten, es in eine externe Class auszugliedern, damit ich nicht soviel "Parser"-Code in der eigtl. Class habe.
 

Sempah

Bekanntes Mitglied
Hallo nochmal ;)

Gibt es in Java irgendeine Möglichkeit (z.B. durch Annotations o.Ä.), das Aufrufen bestimmter Methoden zu forcieren, sofern eine Instanz dieser Klasse erzeugt wird?

Kurzes Beispiel:
Java:
public class Test1 {

	private String test1 = null;
	private String test2 = null;
	
	public Test1(String test1) {
		this.test1 = test1;
	}
	
	// Wenn eine Instanz dieser Klasse erzeugt wird,
	// muss diese Methode ebenfalls aufgerufen werden
	public void setTest2(String test2) {
		this.test2 = test2;
	}
	
	public void printTest1Test2() {
		System.out.println(test1 + " " + test2);
	}
	
	public static void main(String[] args) {
		Test1 t1 = new Test1("string1");
        // Hier sollte ein "Fehler" zu Entwicklungszeiten stehen: 
		// setTest2(String test2) nicht implementiert
		t1.printTest1Test2();
	}
	
}

Verständlich was ich meine?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
passt ja voll zu
> Überprüfung/Parsen eines Byte-Arrays
;)

ein derartiges Konzept habe ich noch nicht gesehen,
du kannst aber in printTest1Test2() eine Exception werfen, falls sich das Objekt nicht im gewünschten Zustand befindet,
oder nur einen Konstruktor/ eine Factory-Methode anbieten, der/ die alle benötigten Parameter enthält und setTest2() aufruft
 

Sempah

Bekanntes Mitglied
Ja die Möglichkeiten habe ich auch schon bedacht, jedoch:

1. Exception: ich möchte diesen Hinweis schon zu Entwicklungszeiten feststellen
2. Konstruktor: so habe ich es im Moment, jedoch würde ich gerne die Anzahl der Parameter, welche ich im Konstruktor übergebe verringern.
 
S

SlaterB

Gast
tja, zaubern kann niemand, das ist zu exotisch für eine automatische Unterstützung

allgemein bedenken kannst du noch Wege der Art
Data1 d1 = new Data1(param1, param2, param3);
Data2 d2 = new Data2(param4, param5, param6);
Test1 t1 = new Test1(d1,d2);
 

Sempah

Bekanntes Mitglied
Jo über diesen Weg habe ich auch schon nachgedacht.
Also ich hätte mir dann eine Klasse mit sämtlichen Eigenschaften geschrieben, die ich benötige und diese würde ich als Paramter dem Konstruktor übergeben.

Schade, wäre ziemlich sinnvoll so eine Annotation (wenn man z.B. mit mehreren Personen entwickelt, um so sicherzustellen, dass alle Methoden aufgerufen werden).
 
S

SlaterB

Gast
ne Annotation für sich hilft da kaum, die Entwicklungsumgebung oder der Compiler müsste den Lebenszyklus von Objekten verfolgen, ein ganz neues Thema,

ginge eh maximal innerhalb einer Methode, nicht über ein beliebig verknüpfes Netz, welches sich Gesamtprogramm nennt,
bisher kriegen es Compiler hin, zu erkennen, ob eine Variable null ist oder nicht, das ist schon eine Kunst, dagegen aber nur Kinderkram ;) ,
na wie auch immer
 

Sempah

Bekanntes Mitglied
Jo vielen Dank dennoch.
Meinte wie wenn man ein interface extended und Eclipse meckert, dass noch unimplemented methods fehlen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Überprüfung ob ein bestimmtes Zeichen <1 mal vorkommt Allgemeine Java-Themen 2
A TicTacToe-ÜBerprüfung in Java Allgemeine Java-Themen 4
Z Programm zur Überprüfung eines Laufwerkes mit anschließender Aktion Allgemeine Java-Themen 2
M Keytool - Überprüfung der Gültigkeits eines Zertifikats Allgemeine Java-Themen 2
G setter und getter: Parameter Überprüfung Allgemeine Java-Themen 6
G Überprüfung der Eingabe ob Typ korrekt Allgemeine Java-Themen 4
G Überprüfung auf Leerzeichen Allgemeine Java-Themen 6
A String Überprüfung Allgemeine Java-Themen 3
K Inhalte Parsen von Website Allgemeine Java-Themen 15
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
O JSON in Integer parsen Allgemeine Java-Themen 5
S Ini Text aus String parsen Allgemeine Java-Themen 1
OnDemand Datenbankdatei parsen Allgemeine Java-Themen 2
N svg(xml) parsen und manipulieren? Allgemeine Java-Themen 3
OnDemand CSV parsen mehrere Zeilen Allgemeine Java-Themen 22
2 mehrere Json Werte Parsen Allgemeine Java-Themen 3
G JSON parsen Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
looparda Datei parsen Allgemeine Java-Themen 1
T Jsoup: Mehrere Links nacheinander parsen Allgemeine Java-Themen 11
C Benutzereingabe von EXCEL-Funktionen parsen Allgemeine Java-Themen 4
B Such-String parsen mit Klammern Allgemeine Java-Themen 2
L Windows CMD werte Parsen. Allgemeine Java-Themen 2
B XML parsen Allgemeine Java-Themen 13
H Bestimmten Wert aus String parsen Allgemeine Java-Themen 7
0 Parsen Allgemeine Java-Themen 7
W Best Practice Dateien parsen Allgemeine Java-Themen 3
X Tags "parsen" Allgemeine Java-Themen 8
A Parsen mit java_cup - Shift/Reduce Problem Allgemeine Java-Themen 12
C Roboter, Befehle parsen Allgemeine Java-Themen 12
M Informationen aus komplexen String parsen Allgemeine Java-Themen 13
W Dateinamen dynamisch Parsen Allgemeine Java-Themen 12
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
T String in Date parsen (*ohne* bekanntes Format) Allgemeine Java-Themen 8
M Dateien mit Quelltext parsen Allgemeine Java-Themen 7
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
S Dateiname mit Regex parsen Allgemeine Java-Themen 3
K _alle_ Sonderzeichen parsen Allgemeine Java-Themen 2
S Feher beim Parsen eines Datums Allgemeine Java-Themen 4
E Reguläre Txt in Tree parsen Allgemeine Java-Themen 2
S Strings zu Color-Instanzen parsen? Allgemeine Java-Themen 7
martin82 Java-Code aus Text-Datei parsen Allgemeine Java-Themen 3
A String zu Datum parsen - SimpleDateFormat Problem Allgemeine Java-Themen 8
A Datum parsen Allgemeine Java-Themen 9
G Parsen von: if(a > 15 AND (b == 3 OR c != 4)) Allgemeine Java-Themen 3
G String nach Float parsen Allgemeine Java-Themen 2
P OutOfMemoryError beim XML erstellen bzw parsen, mehr RAM? Allgemeine Java-Themen 4
H2SO3- Exception beim date parsen des Jahres 00 Allgemeine Java-Themen 6
H2SO3- date mit pm and am parsen Allgemeine Java-Themen 3
Z Datum ohne Format-Kenntnisse parsen Allgemeine Java-Themen 5
T Wie kontinuierlichen asci input parsen? Allgemeine Java-Themen 3
C Java Quellcode parsen Allgemeine Java-Themen 8
alexpetri Date Parsen Allgemeine Java-Themen 3
G String parsen und Problem mit escaped zeichen Allgemeine Java-Themen 4
M Html parsen Allgemeine Java-Themen 2
D Parameter parsen? Allgemeine Java-Themen 15
V Datum parsen Allgemeine Java-Themen 6
MQue String parsen Allgemeine Java-Themen 11
M wie sinnvoll parsen ? Allgemeine Java-Themen 4
M Link parsen bzw. zerlegen Allgemeine Java-Themen 9
padde479 String in double parsen Allgemeine Java-Themen 6
W Package via Reflection parsen Allgemeine Java-Themen 4
M MP3 Datei selber parsen/werte auslesen Allgemeine Java-Themen 13
J parsen von verschiedenen dokument typen Allgemeine Java-Themen 3
B textzeile parsen Allgemeine Java-Themen 6
T Schlüsseldatei mit Umlauten parsen, aber wie. Allgemeine Java-Themen 6
G mail body parsen (->attachment & filename) Allgemeine Java-Themen 2
J DirectPlay Server-Antwort parsen Allgemeine Java-Themen 2
S String parsen Allgemeine Java-Themen 15
V LogFile parsen Allgemeine Java-Themen 5
E Field-Objekt in JTextField parsen Allgemeine Java-Themen 3
L Prozesse parsen ? Allgemeine Java-Themen 2
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben