RegEx Zeile parsen Medium

watle

Mitglied
Hallo zusammen,
ich versuche eine Methode mit regularen Ausdrücken zu schreiben, aber sie funktioniert nicht.
static Medium readMedium(String line) Liest aus einem einzeiligen String
* ein neues Medium ein und gibt dies zurueck. In diesem String sind jeweils
* durch Komma getrennt folgenden Informationen enthalten: Der erste Eintrag
* gibt stets den Typ des Mediums an, also "CD", "DVD" oder "Buch". Der
* zweite Eintrag gibt stets die Registriernummer an, der dritte den Titel,
* der vierte die Information, ob das Medium ausleihbar ist ("true" oder
* "false"). Bei einem Buch folgen anschlieueend ISBN-Nummer, Autor und
* Mindestalter, bei einer CD oder DVD die Abspieldauer und das
* Mindestalter. Ist der uebergebene String nicht diesen Anforderungen
* entsprechend formattiert oder enthuelt er weitere durch Komma separierte
* Elemente, so ist eine IllegalArgumenException zu werfen. Ein korrekter
* String kann zum Beispiel wie folgt aussehen: Buch,104,Terry
* Schotter,true,ISBN:12345,A. Rollin,12 oder: CD,101,Musik der
* Stille,true,34,6

Java:
public static Medium readMedium(String line) {
        if (line == null) {
            throw new NullPointerException();
        }
Medium res = null;
        String[] temp = line.split(Character.toString(','));
        String rBuch = "(Buch),([0-9]+),([A-Za-z ]+),(true|false),"
                + "([A-Z:0-9]+),([A-Za-z. ]+),([0-9]+)";
        String rMed = "(CD|DVD),([0-9]+),([A-Za-z ]+),(true|false),([0-9]+),"
                + "([0-9]+)";
        if (!Pattern.matches(rBuch, line) || !Pattern.matches(rMed, line)) {
            System.out.println("Here is something wrong. Cant read the file");
        }
        if (Pattern.matches(rBuch, line)) {

            int registernummer = Integer.parseInt(temp[1]);
            int mindestalter = Integer.parseInt(temp[6]);
            boolean ausleihbar = Boolean.getBoolean(temp[3]);
            res = new Buch(registernummer, temp[2], ausleihbar, temp[4],
                    temp[5], mindestalter);
        } else if (Pattern.matches(rMed, line)) {
            int registernummer = Integer.parseInt(temp[1]);
            int mindestalter = Integer.parseInt(temp[5]);
            boolean ausleihbar = Boolean.getBoolean(temp[3]);
            int abspieldauer = Integer.parseInt(temp[4]);
            res = temp[0].equals("CD") ? new CD(registernummer, temp[2],
                    ausleihbar, abspieldauer, mindestalter) : new DVD(
                    registernummer, temp[2], ausleihbar, abspieldauer,
                    mindestalter);
        } else {
            throw new IllegalArgumentException("Invalid Line!!!");
        }
        return res;
    }

public static void main(String[] args) {
        readMedium("Buch,104,TerrySchotter,true,ISBN:12345,A. Rollin,12");
        readMedium("CD,101,Thriller,false,34,6");
}

Danke fuer eure Hilfe:rtfm:
 
Zuletzt bearbeitet:
S

SlaterB

Gast
- du schreibst keine Beispielstrings, mit denen du das ganze testet,

- fange einfacher an, z.B. nur einen String "Buch" und matche das mit "(Buch)" oder was auch immer,
wie weit kommst du erfolgreich, ab welcher Erweiterung geht es nicht mehr?

edit:
"readLine(file f)" als Teil des Titels scheint ohne jede Bedeutung, habe ich geändert
 

watle

Mitglied
Hi SlaterB,

mein RegEx funktioniert nicht.
Java:
String rBuch = "(Buch),([0-9]+),([A-Za-z ]+),(true|false),"
                + "([A-Z:0-9]+),([A-Za-z. ]+),([0-9]+)";

        String rMed = "(CD|DVD),([0-9]+),([A-Za-z ]+),(true|false),([0-9]+),"
                + "([0-9]+)";

        if (!Pattern.matches(rBuch, line) || !Pattern.matches(rMed, line)) {
            throw new IllegalArgumentException("Here is something wrong. Cant read the file");
        }

public static void main(String[] args) {
        readMedium(" Buch,104,Terry Schotter,true,ISBN:12345,A. Rollin,12");
        readMedium("CD, 89,Thriller,true,32,12");
// return only a IAE
}
 

watle

Mitglied
Der Regex für den Titel ist falsch. Ein Titel muss stehen und ich gebe als regular Ausdruck:
Code:
[A-Za-z0-9 ]+

Beispiel für den Titel: Java fuer Anfaenger

Danke für die Weiterhilfe:rtfm:
 

watle

Mitglied
habe gefunden:
Java:
String rBuch = "(Buch),([0-9]+),(([A-Za-z0-9 ]+)*),(true|false),"
                + "((ISBN:)[0-9]+),(([A-Za-z. ]+)*),([0-9]+)";
        String rMed = "(CD|DVD),([0-9]+),(([A-Za-z0-9 ]+)*),(true|false)," +
        		"([0-9]+),([0-9]+)";

Danke:)
 

watle

Mitglied
ich bekomme aber immernoch folgende Fehlermeldung beim JUnit-Test;:)noe:
Java:
 [junit] CD,101,EineCD,true,72,6
    [junit] DVD,102,EineDVD,false,94,18
    [junit] Buch,103,Ein Buch,true,ISBN:12345,DerAutor,0
    [junit] Buch,104,Terry Schotter,true,ISBN:12345,A. Rollin,0
    [junit] Buch,105,Der Herr der Dinge,true,ISBN:3456,J. Tollk�hn,12
    [junit] Tests run: 10, Failures: 0, Errors: 1, Time elapsed: 2.932 sec
    [junit] Output:
    [junit] CD,101,EineCD,true,72,6
    [junit] DVD,102,EineDVD,false,94,18
    [junit] Buch,103,Ein Buch,true,ISBN:12345,DerAutor,0
    [junit] Buch,104,Terry Schotter,true,ISBN:12345,A. Rollin,0
    [junit] Buch,105,Der Herr der Dinge,true,ISBN:3456,J. Tollk�hn,12
    [junit] 
    [junit] Tests run: 10, Failures: 0, Errors: 1, Time elapsed: 2.932 sec
    [junit] ------------- Standard Output ---------------
    [junit] CD,101,EineCD,true,72,6
    [junit] DVD,102,EineDVD,false,94,18
    [junit] Buch,103,Ein Buch,true,ISBN:12345,DerAutor,0
    [junit] Buch,104,Terry Schotter,true,ISBN:12345,A. Rollin,0
    [junit] Buch,105,Der Herr der Dinge,true,ISBN:3456,J. Tollk�hn,12
    [junit] ------------- ---------------- ---------------
bitte um hilfe
 
S

SlaterB

Gast
was ist denn deine Frage?
falls man an dem JUnit-Log alles erkennen können sollte - ich kann das nicht,
macht irgendeine bestimmte Zeile Probleme?
kopiere diese in eine normales main-Programm und teste sie, zu welcher hast du eine Frage?

ok, eins ist ja doch an dem Output deutlich: Tollk�hn wird irgendwie komisch geschreiben, dieses Sonderzeichen ist in deinem RegEx sicher nicht abgebildet,
aber was soll jetzt dein 'bitte um hilfe'? das Programm ist hilflos und braucht einen Programmierer als Helfer, bist du aber wirklich nicht schlauer als ein Computer?

schau dir an wo dieser Tolkien herkommt, dein ursprünglicher Thementitel war ja zum Teil "readLine(file f)",
spielt also eine Datei eine Rolle? schau dir an was dort drinsteht, lade die Datei hoch (Anhang an Posting),
poste den Code wie du die Zeilen davon einliest, achtest du da auf Encoding/ CharSet?

nichts davon musst du auf Anhieb lösen, aber du solltest dir zumindest intelligente Gedanken machen
und wenigstens die ganzen Umstände mitteilen die ich mir jetzt selber zusammenreime und mühsam abfragen muss...
 
Zuletzt bearbeitet von einem Moderator:

watle

Mitglied
Sorry SlateB. Habe vergessen erledigt zu markieren.
Ich habe also die Methode durch einen ganz anderen Weg geschrieben. Der Code lautet jetzt:
Java:
public static Medium readMedium(String line) {
        if (line == null) {
            throw new NullPointerException("line == null");
        }
        Medium res = null;
        String[] temp = line.split(Character.toString(','));

        if (temp.length != 7 && temp.length != 6) {
            throw new IllegalArgumentException("line length != 7 or 6");
        }
        int registernummer = 0;
        boolean ausleihbar = false;
        String titel = temp[2];
        if (isValidBCD(temp[0]) || isBooleanValue(temp[3])
                || isValidDigit(temp[1])) {
            registernummer = Integer.parseInt(temp[1]);
            ausleihbar = Boolean.parseBoolean(temp[3]);
        } else {
            throw new IllegalArgumentException("3 erste Strings nicht valid");
        }
        if (temp[0].equals("Buch") && temp.length == 7 && isValidDigit(temp[6])) {
            int mindestalter = Integer.parseInt(temp[6]);
            res = new Buch(registernummer, titel, ausleihbar, temp[4], temp[5],
                    mindestalter);
        } else if ((temp[0].equals("CD") || temp[0].equals("DVD"))
                && temp.length == 6 && isValidDigit(temp[4])
                && isValidDigit(temp[5])) {
            int mindestalter = Integer.parseInt(temp[5]);
            int abspieldauer = Integer.parseInt(temp[4]);
            res = temp[0].equals("CD") ? new CD(registernummer, titel,
                    ausleihbar, abspieldauer, mindestalter) : new DVD(
                    registernummer, titel, ausleihbar, abspieldauer,
                    mindestalter);
        } else {
            throw new IllegalArgumentException("Invalid line");
        }

        return res;
    }

Vielen Dank für Deine Zeit
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
H Frage regex greater than less than Allgemeine Java-Themen 7
N Regex schlägt nicht an Allgemeine Java-Themen 10
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
T regex case insensitive trimmed Allgemeine Java-Themen 6
S Zeichen | in regex Allgemeine Java-Themen 8
X Regex mit mehreren Bedingungen machen Allgemeine Java-Themen 5
N Hilfe bei RegEx benötigt Allgemeine Java-Themen 3
C Java17 und Regex Allgemeine Java-Themen 13
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
N Gierigen Regex in nicht-gierigen umwandeln Allgemeine Java-Themen 4
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
OnDemand Regex von bis Allgemeine Java-Themen 6
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
G Regex Allgemeine Java-Themen 2
L regex ganzer string? Allgemeine Java-Themen 2
MiMa Geldbetrag mit regex ermitteln. Allgemeine Java-Themen 14
W RegEx Stringliteral finden - Jflex Allgemeine Java-Themen 5
D Regex Probleme Allgemeine Java-Themen 2
Kirby.exe Regex charakter ignorieren Allgemeine Java-Themen 12
S Java SAT (Haltbarkeitsproblem) mit Regex Allgemeine Java-Themen 6
S [Regex] Nur diese Zeichen beachten Allgemeine Java-Themen 1
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
S Regex mit UND-Verknüpfung Allgemeine Java-Themen 1
P RegEx für Zeiten Allgemeine Java-Themen 7
D Regex: Komplettes Wort bekommen Allgemeine Java-Themen 3
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P RegEx Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
Y regex | n-faches Vorkommen oder gar keins Allgemeine Java-Themen 6
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
HarleyDavidson Regex - Optimierung Allgemeine Java-Themen 4
M Regex für Zahleneingabe in JavaFX Textfield Allgemeine Java-Themen 18
T Best Practice Wortregeln RegEx Allgemeine Java-Themen 11
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
H Interpreter-Fehler Regex kompiliert nicht Allgemeine Java-Themen 5
M RegEx alle Matches ausgeben Allgemeine Java-Themen 5
Iron Monkey Mit Regex nach Beträge suchen Allgemeine Java-Themen 4
T REGEX Erklaerung Allgemeine Java-Themen 14
T Nur innerhalb des regex-Match ersetzen Allgemeine Java-Themen 9
H Pic Download / Regex Problem Allgemeine Java-Themen 7
F Frage zu Regex möglich Allgemeine Java-Themen 4
M Regex... mal wieder Allgemeine Java-Themen 3
H RegEx - Ersetze alles bis Leerzeichen Allgemeine Java-Themen 5
S regex verbrät CPU Allgemeine Java-Themen 6
V Regex Bereichs Filter Allgemeine Java-Themen 4
127.0.0.1 RegEx _ und 0-9 Allgemeine Java-Themen 45
S Entfernen von allen Nicht-Buchstaben chars aus einem String ohne Regex..? Allgemeine Java-Themen 10
P Java String Regex Allgemeine Java-Themen 2
AyKay Regex XPath Allgemeine Java-Themen 4
C Regex (Case insensitive und Umlaute) Allgemeine Java-Themen 4
D Regex Raute erkennen Allgemeine Java-Themen 2
nrg Zweistelligen Zahlenbereich mit RegEx Allgemeine Java-Themen 8
GilbertGrape Regex-Problem Allgemeine Java-Themen 2
W Denkblockade RegEx Allgemeine Java-Themen 2
S eigene regEx schreiben Allgemeine Java-Themen 4
C Regex expandieren Allgemeine Java-Themen 6
C Regex Überschniedung von Ausdrücken Allgemeine Java-Themen 16
reibi RegEX - Teilstring Allgemeine Java-Themen 6
R Java-RegEx terminiert nicht Allgemeine Java-Themen 3
M Regex: Ich stehe auf dem Schlauch Allgemeine Java-Themen 2
V Kleines Regex-Problem Allgemeine Java-Themen 3
B Regex "Problem" Allgemeine Java-Themen 4
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
J Regex: Fertige URLS aus Javascript Allgemeine Java-Themen 3
N Java regex Allgemeine Java-Themen 5
K Regex JSON Allgemeine Java-Themen 3
J RegEx Ausdruck Allgemeine Java-Themen 2
J Regex: URLS aus CSS Allgemeine Java-Themen 2
G RegEx- Ausdruck Allgemeine Java-Themen 4
G RegEx kein Unterstrich Allgemeine Java-Themen 2
A Text via RegEx durchsuchen und teile ersetzten Allgemeine Java-Themen 5
C Regex: Zahl ohne führende Null Allgemeine Java-Themen 13
X Java String Regex - Sonderzeichen Filtern Allgemeine Java-Themen 5
S Dateiname mit Regex parsen Allgemeine Java-Themen 3
Loyd Noch ne Regex-Frage: Verschachtelte Ausdrücke Allgemeine Java-Themen 4
R Java Regex Frage Allgemeine Java-Themen 17
Daniel_L RegEx-Frage: Ersetzen in UBB ausschließen Allgemeine Java-Themen 2
M Große Datei mit Regex durchsuchen Allgemeine Java-Themen 4
S regex für einen Link Allgemeine Java-Themen 3
E Regex alles nach ? löschen Allgemeine Java-Themen 4
M RegEx-Frage Allgemeine Java-Themen 2
R Regex Tokenizer Allgemeine Java-Themen 11
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
H RegEX und eMail Allgemeine Java-Themen 4
L-ectron-X Regex zum Entfernen von mehrzeiligen Kommentaren Allgemeine Java-Themen 2
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
B Regex-Fehler nach lib-Update Allgemeine Java-Themen 2
K Contrains oder Regex Allgemeine Java-Themen 3
J replaceAll , "[", "]" & regex Allgemeine Java-Themen 12
P RegEx und $-Zeichen als Literal Allgemeine Java-Themen 5
P RegEx - Worte ausschließen Allgemeine Java-Themen 8
S Regex - was isst denn {javaLetter} und {javaDigit}? Allgemeine Java-Themen 2
D Wie werden Regex-Gruppen kompiliert? Allgemeine Java-Themen 2
Stillmatic RegEx Matches ausgeben Allgemeine Java-Themen 10
A Regex gesucht Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben