Nach regex splitten

Status
Nicht offen für weitere Antworten.

thE_29

Top Contributor
Hiho!

Ich möchte einen String nach , (Beistrich) splitten, aber wenn der Beistrich zwischen 2 Anführungszeichen steht dann nicht!

Bsp.: String = getBla(), "hier ist ein, du schelm du", getOberbla()

Wenn ich das jetzt splitte will ich das haben:

[0] = getBla()
[1] = "hier ist ein, du schelm du"
[2] = getOberBla()



Ich weiß (bzw glaube ;)) dass man das via regex machen kann. Aber wie weiß ich nicht...


mfg
 

thE_29

Top Contributor
Hilft mir leider auch nicht weiter..

Da 1. dort viel auf den Scanner eingegangen wird, ich aber mit 1.4.2 arbeite und 2. kaum was von regex erwähnt wird!
 

Leroy42

Top Contributor
Das du bisher nur auf allgemeine Infos zu RegExps verwiesen wurdest,
deutet darauf hin, daß es nicht geht. Denn ich bin mir sicher,
daß einige der hiesigen RegExperten sich sich bereits ohne Erfolg bemüht haben
eine Lösung zu finden (die lassen ja sonst nicht so lange auf sich warten :wink: )

Mein Bauchgefühl (früher mal antrainiert) sagt mir, daß es keine
derartige RepExp geben kann (Mächtigkeit von Typ-3-Grammatiken und
der ganze Kram).

Beweisen kann ich das jetzt aber nicht (mehr). :oops:
 
M

Mario_H

Gast
Mein Bauchgefühl sagt es geht.
Mehr hab ich leider auch nicht zu bieten...

Dein Beispiel ist etwas verwirrend, vielleicht hat deswegen noch niemand ne Lösung..
Sieht aus als würdest du Funktionen verwenden, aber nach genauerer Betrachtung vermute ich du meinst das alles als Zeichenkette..

Bsp in Java-Syntax: "getBla(), \"hier ist ein, du schelm du\", getOberbla()" !?
 

thE_29

Top Contributor
Eigentlich gehts darum, nen Java Source zu durchsuchen und Einträge in die Datenbank zu schreiben!

Die 3 Parameter sind bei einer Methode angegeben und ich wollte sie nach , splitten!

Problem ist halt das, wenn etwas unter " " steht, dürfte er das net splitten!
 

Leroy42

Top Contributor
Bei derartigen Aufgabenstellungen schreibst du dir am besten deinen eigenen kleinen Parser.
Pseudocode:

Code:
int last = 0;
int pos = -1;
boolean inString = false;
while (++pos < source.length()) {
  char c = source.charAt(pos);
  switch (c) {
    case '"' : inString = !inString; break;
    case ',' : 
      if (!inString) {
        newToken(source, last, pos);
        last = pos+1;
      }
      break;
    default: break;
}
if (!inString)
  newToken(source, last, pos-1) // oder so ähnlich
 
M

Mario_H

Gast
Soll es allgemeingültig werden? Dann musst du auch auf Kommentare achten, bsp:

Code:
getBla(), /* hmm, so ein Mist!!*/ "hier ist ein, du schelm du", getOberbla()  //hier gibt es Kommas,,,

Und vergiss ',' nicht.
 

foobar

Top Contributor
Also ich denke schon, daß sich das mit einem Regex lösen lässt. Das Splitten klappt schon, aber die Quotings werden noch verschluckt:

Code:
Pattern p   =  Pattern.compile("([^\"]*),([^\"]*)");
Matcher m = p.matcher(in);
while (m.find())
{
      System.out.println(">> " +  m.group());
}

Sysout:
Code:
>> getBla(),  
>> hier ist ein, du schelm du
>> , getOberbla()

Ich habe auch etwas mit Look-Aheads und Look-Behinds experimentiert, aber bisher ohne Erfolg :-(
 

thE_29

Top Contributor
Naja, die Quotes wären net so wichtig!
Kommentare sind auch keine Vorhanden (also dazwischen)
Und den einen Beistrich könnte ich auch wegmachen..

Naja, danke erstmals, ich guck morgen weiter!
 

Leroy42

Top Contributor
foobar hat gesagt.:
Also ich denke schon, daß sich das mit einem Regex lösen lässt.

Optimist! :cool:

Was liefert deine RegExp denn bei Auswertung der Parameter von

Code:
System.out.println("Achtung: ", "ich bin ein \"String\", 'ich nicht'", 42);
 

thE_29

Top Contributor
Es sieht immer so aus

Bundle.getULabel("KEY_WORD_OHNE_BEISTRICH",getLanguage(),"Deutscher default Text, mit Beistrichen");

Es kann hinten noch was stehen, aber das interessiert mich nicht! (Bsp.: ..., "default text, mit Beistrichen", new String[]{"param1","param2"}); )

Ziel ist es, einen Wrapper zu schreiben der mir die Keywörter + defaulttext in eine Datenbank schreibt!

Ansonsten muss ich ziemlich viel mit Hand nachtipseln :(
 

foobar

Top Contributor
Leroy42 hat gesagt.:
foobar hat gesagt.:
Also ich denke schon, daß sich das mit einem Regex lösen lässt.

Optimist! :cool:

Was liefert deine RegExp denn bei Auswertung der Parameter von

Code:
System.out.println("Achtung: ", "ich bin ein \"String\", 'ich nicht'", 42);

Code:
>> , 
>> , 'ich nicht''', 42);
 

PyroPi

Aktives Mitglied
thE_29 hat gesagt.:
Es sieht immer so aus

Bundle.getULabel("KEY_WORD_OHNE_BEISTRICH",getLanguage(),"Deutscher default Text, mit Beistrichen");

Es kann hinten noch was stehen, aber das interessiert mich nicht! (Bsp.: ..., "default text, mit Beistrichen", new String[]{"param1","param2"}); )

Also dieses Muster läßt sich mit folgendem Regulären Ausdruck zerlegen:

Code:
    String input =
        "Bundle.getULabel(\"keyword\",getLanguage(),\"Text, sogar mit Komma\");\n" +
        "Bundle.getULabel(\"another_keyword\",getLanguage(),\"Hier ein Text ohne Komma\");\n" +
        "Bundle.getULabel(\"third_keyword\",getLanguage(),\"Und hier mit Zusatzinformationen -->\", new String[]{\"param1\",\"param2\"});";

    String pattern = "Bundle[.]getULabel\\(\"" +
        // [1] = Schlüsselwort
        "([^\"]*?)\"," +
        // [2] = getLanguage
        "([^,]*?),\"" +
        // [3] = Text
        "([^\"]*?)\".*?\\);";
		
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(input);

    while (m.find()) {
        System.out.println("[1]=" + m.group(1));
        System.out.println("[2]=" + m.group(2));
        System.out.println("[3]=" + m.group(3));
        System.out.println("---");
    }

Ausgabe:
Code:
[1]=keyword
[2]=getLanguage()
[3]=Text, sogar mit Komma
---
[1]=another_keyword
[2]=getLanguage()
[3]=Hier ein Text ohne Komma
---
[1]=third_keyword
[2]=getLanguage()
[3]=Und hier mit Zusatzinformationen -->
---

Dürfen aber nirgends Leerzeichen drin sein, also vorher evtl. rausfiltern!
 

PyroPi

Aktives Mitglied
Hhm, hast Recht, da hab ich so leichtfertig geschrieben vorher alle Leerzeichen rausfiltern, aber mit replaceAll("[ ]", "") bspw. würde man ja auch die Leerzeichen in den Zeichenketten wegfiltern.

Also hier noch mal eine modifizierte Version, die beliebig viele Whitespace-Zeichen an den Java-üblichen Stellen erlaubt:

Code:
    String input =
        "  Bundle.getULabel(\"keyword\",getLanguage() , \"Text, sogar mit Komma\") ;  \n" +
        "Bundle.getULabel  ( \"another_keyword\",   getLanguage(),  \"Hier ein Text ohne Komma\")  ;\n" +
        "\tBundle.getULabel(\"third_keyword\",\t  getLanguage()   , \"Und hier mit Zusatzinformationen -->\", new String[]{\"param1\",\"param2\"});";

    String pattern = "Bundle[.]getULabel\\s*\\(\\s*\"" +
        "([^\"]*?)\"\\s*,\\s*" +
        "([^,]*?)\\s*,\\s*\"" +
        "([^\"]*?)\".*?\\)\\s*;";

Liefert die gleiche Ausgabe wie im letzten Beispiel.
 

PyroPi

Aktives Mitglied
Na ich erklär mal die einzelnen Teile kurz und knapp:

Code:
String pattern =
    "Bundle[.]getULabel" +  // Den String "Bundle.getULabel" finden
    "\\s*" +  // Eine möglichst lange Sequenz nur aus Whitespace-Zeichen
    "\\(\\s*" +  // Klammer auf und Whitespace-Sequenz
    "\"([^\"]*?)\"" +  // 1. Gruppe (zwischen zwei Anführungszeichen): Sequenz aus beliebigen Zeichen, außer dem Hochkomma
    "\\s*,\\s*" +  // Zwei Whitespace-Sequenzen, getrennt durch ein Komma
    "([^,]*?)" +  // 2. Gruppe: Sequenz aus beliebigen Zeichen, außer Komma
    "\\s*,\\s*" +
    "\"([^\"]*?)\"" +  // 3. Gruppe (wie Gruppe 1)
    ".*?\\)\\s*;";  // Sequenz von beliebigen Zeichen, Klammer zu, Whitespace-Sequenz, Semikolon

Im Text wird nach einer Stelle gesucht, auf die der gesamte RegEx paßt. Mittels Matcher.group(i) kann dann der Text der einzelnen Gruppen (im RegEx durch runde Klammern gekennzeichnet) separat abgefragt werden.

Steht aber alles in der API ... :meld:
 

Leroy42

Top Contributor
PyroPi hat gesagt.:
Steht aber alles in der API ... :meld:

Naja, irgendwo finde ich auch Beschreibungen wie ich Schraubenschlüssel
und dergleichen benutze, dann kann ich aber noch lange kein Motor
auseinander und zusammen bauen :cool:

Fremde RegExps zu lesen und zu verstehen ist wirklich keine leichte Aufgabe. ???:L
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
Iron Monkey Mit Regex nach Beträge suchen Allgemeine Java-Themen 4
E Regex alles nach ? löschen Allgemeine Java-Themen 4
B Regex-Fehler nach lib-Update Allgemeine Java-Themen 2
G Regex-Suche nach Worten Allgemeine Java-Themen 3
D WSDL-Aufruf funktioniert nicht mehr nach Umstieg auf Maven Allgemeine Java-Themen 4
Zrebna Tipps für Organisation von Code-Reviews nach einem Pull Request. Allgemeine Java-Themen 5
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
OnDemand Ram Freigabe erfolgt nicht nach Prozessende Allgemeine Java-Themen 18
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
I In Java geschriebene Software nach Mac OS portieren Allgemeine Java-Themen 7
M TicTacToe Sound nach jedem Zug Allgemeine Java-Themen 21
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
J4n5chmiddi Methoden Website-URL im Browser öffnen nach erfolgreicher Basisauthentifizierung in Java Allgemeine Java-Themen 12
pkm Frage nach eventuellem syntaktischen Zucker bei der Konkatenation von ArrayLists Allgemeine Java-Themen 4
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
H Collections Aktuellen Index generell und nach Sortierung ausgeben Allgemeine Java-Themen 6
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
S Wörterliste nach Wörtern mit u durchsuchen und diese auf der Konsole ausgeben lassen Allgemeine Java-Themen 33
W Pdf verwerfen, weil Checkbox nach Unterschrift geaendert wurde Allgemeine Java-Themen 5
G File not found - nach dem Kompilieren Allgemeine Java-Themen 6
S Swing Speichern nach Button-Klick Allgemeine Java-Themen 5
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
M Java 8 nach Java 6 konvertieren Allgemeine Java-Themen 7
N Neustarten des Codes nach der Fehlermeldung Allgemeine Java-Themen 17
L Nach dem Login // Java Desktop Software Allgemeine Java-Themen 7
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
J Jasper Reports - Compilerproblem nach Umstellung von Groovy auf Java Allgemeine Java-Themen 7
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
S Apache POI Filtern nach bestimmten Kriterium Allgemeine Java-Themen 1
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
C Config nach bestimmten Wertdurchsuchen. Allgemeine Java-Themen 2
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
B Maven Keycloak library wirft exceptions nach maven package Allgemeine Java-Themen 1
D BufferedReader bricht nach 1248 Iterationen ab Allgemeine Java-Themen 14
G Eclipse Java findet MySQL Driver nach export nicht mehr Allgemeine Java-Themen 2
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
F Zurnung nach Buchstaben und deren Prüfung Allgemeine Java-Themen 9
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
MiMa Sortieren nach Stellenangaben Allgemeine Java-Themen 7
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
J Ausgabe von Links nach Rechts ausgeben? Allgemeine Java-Themen 2
K JAR Datei Corrupt nach Kopieren Allgemeine Java-Themen 4
The Pi 2D-Grafik Tic Tac Toe nach Gewinn rot Allgemeine Java-Themen 1
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
L Suche nach CalDav Server API Allgemeine Java-Themen 0
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
T Textarea nach nur 1 wort durchsuchen Allgemeine Java-Themen 3
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
I nach Image Load in ListView, kann Ordner nicht mehr gelöscht werden Allgemeine Java-Themen 1
K Auf einer Website nach einem String suchen Allgemeine Java-Themen 5
C Eclipse OutOfMemory nach dem exportieren Allgemeine Java-Themen 4
D Erste Schritte Array von einer forschleife nach ausserhalb trasferieren Allgemeine Java-Themen 3
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
B Bild aus Jar kann nach Export nicht mehr gefunden werden Allgemeine Java-Themen 13
B Umgebungsvariable Anpassen der Umgebungsvariablen nach Java-Update ? Allgemeine Java-Themen 14
H jid3lib nach schreiben keine Tags im Folder angezeigt Allgemeine Java-Themen 1
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
KilledByCheese Dezimal nach Hexadezimal rechner wirft seltsame exception Allgemeine Java-Themen 4
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
E Java wird beendet nach paar Sekunden Allgemeine Java-Themen 14
H Best Practice setHeader in jsp nach RequestDispatcher.include Allgemeine Java-Themen 0
L Nach Button drücken den Text festspeichern Allgemeine Java-Themen 9
M .jar nach Datei prüfen Allgemeine Java-Themen 2
F String nach Schlüsselwörtern durchsuchen und ganze Zeile ausgeben Allgemeine Java-Themen 4
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
VfL_Freak JDK installieren Problem mit Erstellungspfad nach Wechsel von Java7 auf Java8 Allgemeine Java-Themen 1
B Eclipse Nach Export einer .jar Fehler: Hauptklasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 5
thet1983 nach teilen eines Dateinamens suchen Allgemeine Java-Themen 6
F JLabel nach 5 Sekunden wieder leeren Allgemeine Java-Themen 7
M Fasta nach Mustern durchsuchen dauert zu lange Allgemeine Java-Themen 2
J Bilder halb in falscher Farbe nach kopieren aus Web Allgemeine Java-Themen 3
Thallius Neuen Prozess starten, der auch nach Beedingung des Starter-Prozesses weiterläuft? Allgemeine Java-Themen 5
T Nach Java Update: Jar Datein öffnen sich nicht mehr mit doppelklick Allgemeine Java-Themen 3
S Start des zweiten Threads erst nach Beenden des ersten Threads Allgemeine Java-Themen 13
A Funktionen aufrufen nach Schema x Allgemeine Java-Themen 2
G JavaFX Problem nach Update auf Java 8 Allgemeine Java-Themen 0
AssELAss String jeweils nach x Zeichen Zeilenumbruch Allgemeine Java-Themen 1
F E-Mail aus JAVA senden nach Umstellung auf Netbean 7.4 mit Java 7U45 nicht mehr möglich Allgemeine Java-Themen 4
J Ausgabe nach Excel Allgemeine Java-Themen 1
K PCM_UNSIGNED nach PCM_SIGNED Allgemeine Java-Themen 0
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
AssELAss Zeilenumbruch immer nach bestimmtem Zeichen Allgemeine Java-Themen 1
L Strings nach sortiertem String zurück ordnen Allgemeine Java-Themen 0
A Java - Suche nach Datensatz mit DateChooser Allgemeine Java-Themen 0
L Strings nach gleichem Muster ordnen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben