[RegEx] gesplittetes Zeichen behalten

DonMarcoHH

Aktives Mitglied
Moin,

jetzt mal eine vielleicht doch kompliziertere Frage (für die RegEx-Meister):
Ich hab folgenden Beispielcode:
Java:
String line = " String POL ;"
Die Leerzeichen sind dabei signifikant. Vor und nach dem
Code:
String
und vor und nach dem
Code:
POL
muss ein Leerzeichen sein. Nach diesem will ich jetzt splitten a lá:
Java:
String[] splitLine = line.split(" ");
Ich hab auch einen RegEx gefunden wodurch das letzte Leerzeichen behalten wird:
Java:
"(?<=[ ])"
Jedoch wird hierbei auch das erste Leerzeichen als eigenes Wort mitgenommen.
Also was ich habe:
Java:
String line = " String POL ;";
String[] splitLine = line.split("(?<=[ ])");
Ausgabe ist dabei:
Code:
splitLine[0] = " "
splitLine[1] = "String "
splitLine[2] = "POL "
Ich hätte aber gerne:
Code:
splitLine[0] = " String "
splitLine[1] = " POL "
 

nrg

Top Contributor
wenn der input
Code:
" String  POL ;"
mit zwei leerzeichen dazwischen ist (wie du es auch schreibst aber nicht im code hast), könnte das vllt so gehen:

Java:
		Matcher m = Pattern.compile("\\s.*?\\s").matcher(" String  POL ;");
		while (m.find())
			System.out.println(m.group());
 

DonMarcoHH

Aktives Mitglied
wenn der input
Code:
" String  POL ;"
mit zwei leerzeichen dazwischen ist (wie du es auch schreibst aber nicht im code hast), könnte das vllt so gehen:

Java:
		Matcher m = Pattern.compile("\\s.*?\\s").matcher(" String  POL ;");
		while (m.find())
			System.out.println(m.group());

Achso... ja das ist etwas unglücklich formuliert.
Zwischen jedem "Wort" muss ein Leerzeichen sein. Und jedes Wort muss nach dem Splitten immernoch von Leerzeichen umgeben sein! (Es ist also zwischen
Code:
String
und
Code:
POL
nur ein Leerzeichen, welches aber nach dem Split in beiden Gruppen auftauchen soll!)
 
S

SlaterB

Gast
die fragliche Methode ist letztlich folgende in Pattern:
Java:
    public String[] split(CharSequence input, int limit) {
        int index = 0;
        boolean matchLimited = limit > 0;
        ArrayList matchList = new ArrayList();
        Matcher m = matcher(input);

        // Add segments before each match found
        while(m.find()) {
            if (!matchLimited || matchList.size() < limit - 1) {
                String match = input.subSequence(index, m.start()).toString();
                matchList.add(match);
                index = m.end();
            } else if (matchList.size() == limit - 1) { // last one
                String match = input.subSequence(index,
                                                 input.length()).toString();
                matchList.add(match);
                index = m.end();
            }
        }

        // If no match was found, return this
        if (index == 0)
            return new String[] {input.toString()};

        // Add remaining segment
        if (!matchLimited || matchList.size() < limit)
            matchList.add(input.subSequence(index, input.length()).toString());

        // Construct result
        int resultSize = matchList.size();
        if (limit == 0)
            while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
                resultSize--;
        String[] result = new String[resultSize];
        return (String[])matchList.subList(0, resultSize).toArray(result);
    }
die kannst du kopieren, unnötiges rausschmeißen und vor allem in der Schleife dann auch m.group() als das gemachte RegEx-Stück zum gefundenen match hinzufügen

edit: du kannst auch die Gruppen vor und nach beim aktuellen und nächsten Match hinzufügen usw.
 

nrg

Top Contributor
Achso... ja das ist etwas unglücklich formuliert.
Zwischen jedem "Wort" muss ein Leerzeichen sein. Und jedes Wort muss nach dem Splitten immernoch von Leerzeichen umgeben sein! (Es ist also zwischen
Code:
String
und
Code:
POL
nur ein Leerzeichen, welches aber nach dem Split in beiden Gruppen auftauchen soll!)


dann hätte ich vllt noch das anzubieten :D

Java:
	public static void main(String[] args) {
		Matcher m = Pattern.compile("\\s.*?\\s").matcher(" String POL String POL ;");
		for (int i = 0; m.find(i); i = m.end() - 1) {
			System.out.println(m.group());
		}
	}

edit: passt dann aber doch besser in eine for :)
 
Zuletzt bearbeitet:

DonMarcoHH

Aktives Mitglied
die fragliche Methode ist letztlich folgende in Pattern:
[...]
die kannst du kopieren, unnötiges rausschmeißen und vor allem in der Schleife dann auch m.group() als das gemachte RegEx-Stück zum gefundenen match hinzufügen

edit: du kannst auch die Gruppen vor und nach beim aktuellen und nächsten Match hinzufügen usw.

Deine Zeile 5 macht mir Probleme. Was ist die Methode matcher(input)?! :rtfm:

EDIT:
Es gibt also keinen so genialen RegEx Ausdruck, wie ich ihn schon gefunden hab, der mir einfach noch nen Leerzeichen vor jedes Wort schreibt!?
Weil sonst kann ich auch einfach meinen nehmen und eine Schleife drüber laufen lassen:
Java:
for (int i = 0; i < splitLine.length; ++i){
splitLine[i] = " " + splitLine[i];
}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
Pattern und Matcher sollte man schon gehört haben wenn man irgendwas mit RegEx in Java macht, die String-Methoden sind nur Abkürzung, die intern diese Klassen aufrufen,

ein RegEx kümmert sich überhaupt nicht um split, insofern kannst auf diesem direkten Wege nichts erwarten, nein
 

nrg

Top Contributor
D
Es gibt also keinen so genialen RegEx Ausdruck, wie ich ihn schon gefunden hab, der mir einfach noch nen Leerzeichen vor jedes Wort schreibt!?
Weil sonst kann ich auch einfach meinen nehmen und eine Schleife drüber laufen lassen:
Java:
for (int i = 0; i < splitLine.length; ++i){
splitLine[i] = " " + splitLine[i];
}

wie slater schon gesagt hat, gibt es sowas direkt nicht. natürlich kannste auch einfach splitten und den whitespace wieder dranhängen. ich wüsst jetzt aber nichts, was gegen o.g. codeschnipsel einzuwenden ist.
 

DonMarcoHH

Aktives Mitglied
wie slater schon gesagt hat, gibt es sowas direkt nicht. natürlich kannste auch einfach splitten und den whitespace wieder dranhängen. ich wüsst jetzt aber nichts, was gegen o.g. codeschnipsel einzuwenden ist.

Gegen oben genanntes Beispiel ist einzuwenden, dass mein Compiler mir bei folgender Methode:
[JAVA=5] Matcher m = matcher(input);
[/code] meldet, Methode "matcher(input) nicht bekannt!
 
S

SlaterB

Gast
weil dies Quellcode aus der Klasse Pattern ist, wenn du das woanders hast, brauchst du ein Pattern-Objekt p und musst p.matcher() aufrufen,
sämtliche Grundlagen zu so einem komplexen Thema mit zu erwähnen ist anstrengend
 

AmunRa

Gesperrter Benutzer
Weil matcher(input) eine Methode von der Klasse Pattern ist.

d.H. du brauchst das Object vom Typ Pattern

Java:
Pattern p = ........;
Matcher m = p.matcher(input)
 

DonMarcoHH

Aktives Mitglied
weil dies Quellcode aus der Klasse Pattern ist, wenn du das woanders hast, brauchst du ein Pattern-Objekt p und musst p.matcher() aufrufen,
sämtliche Grundlagen zu so einem komplexen Thema mit zu erwähnen ist anstrengend

Jetzt nicht persönlich nehmen, aber woher soll ich denn wissen, dass du in der Klasse Pattern bist und man darin bleiben muss?! :bahnhof:
Mit rauskopieren dachte ich schon in meine Klasse, die ich da benutze.

Ich hab bisher nie mit Pattern/Matcher gearbeitet, sonst würde ich auch nicht so doof fragen... ???:L
 
S

SlaterB

Gast
Jetzt nicht persönlich nehmen,
keine Sorge
aber woher soll ich denn wissen, dass du in der Klasse Pattern bist
durch Lesen meines Postings:
die fragliche Methode ist letztlich folgende in Pattern:
;)
und man darin bleiben muss?! :bahnhof:
nun, das war das Grundwissen was ich angenommen hatte


Ich hab bisher nie mit Pattern/Matcher gearbeitet, sonst würde ich auch nicht so doof fragen... ???:L
dass du dich damit vorher auseinandersetzen solltest hatte ich dann auch schon geschrieben:
Pattern und Matcher sollte man schon gehört haben wenn man irgendwas mit RegEx in Java macht

-----

es ist wie es ist, sowas zu modifizieren sind letztlich zwar nur paar Zeilen, aber in der Gesamtheit doch relativ komplex,
erfordert Grundwissen zu Java einerseits und zu Pattern/ Matcher andererseits,

wenn du alternativ einfach ein Leerzeichen einfügen kannst oder der Code von nrg geht, dann ist das doch auch gut
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Regex mit Umlauten Java Basics - Anfänger-Themen 8
S Anfänger Regex Java Basics - Anfänger-Themen 4
G Regex greift nicht richtig Java Basics - Anfänger-Themen 4
B Regex Order unwichtig bei Lookaheads? Java Basics - Anfänger-Themen 7
F RegEx Hilfe Java Basics - Anfänger-Themen 5
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
W RegEx Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
A Zusammengesetzte Nomen/Straßennamen mit Regex-Ausdrücken trennen Java Basics - Anfänger-Themen 8
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
H Java Regex Aufzählung kontrollieren Java Basics - Anfänger-Themen 3
Nooobi Regex und .matches() geben keine Ausnahme Java Basics - Anfänger-Themen 10
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
L Hilfe bei RegEx Java Basics - Anfänger-Themen 4
Dimax RegEx Java Basics - Anfänger-Themen 10
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
L Regex issue Java Basics - Anfänger-Themen 4
B Regex Kombination benötigt Java Basics - Anfänger-Themen 5
strohkolben Regex Java Basics - Anfänger-Themen 3
OnDemand Regex oder Split? Java Basics - Anfänger-Themen 5
I String.split regex Frage Java Basics - Anfänger-Themen 2
C RegEx Problem Java Basics - Anfänger-Themen 4
Dimax RegEx funktionieren nicht Java Basics - Anfänger-Themen 7
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
K substitute mit regex Java Basics - Anfänger-Themen 10
G RegEx Java Basics - Anfänger-Themen 11
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
G Regex Java Basics - Anfänger-Themen 4
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
M Regex anpassen Java Basics - Anfänger-Themen 19
C Regex-Problem Java Basics - Anfänger-Themen 4
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
F RegEx für Email Java Basics - Anfänger-Themen 2
F RegEx "+" nur als Zeichen, nicht als Operator oder Sonstiges Java Basics - Anfänger-Themen 2
FelixN RegEx aus einem String als String-Array zurückgeben Java Basics - Anfänger-Themen 8
FelixN RegEx Erläuterung "ˆ[ˆa-zA-Z]+$" Java Basics - Anfänger-Themen 6
F Regex Hilfe Java Basics - Anfänger-Themen 3
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
C Regex Java Basics - Anfänger-Themen 2
C Probleme bei Regex Java Basics - Anfänger-Themen 9
B Regex ignorieren von Groß - Kleinschreibung Java Basics - Anfänger-Themen 1
F Regex für Inlineformatierungen Java Basics - Anfänger-Themen 12
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
O Regex Java Basics - Anfänger-Themen 2
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
H regex-Problem Java Basics - Anfänger-Themen 2
F Ist das ein korrekter Regex-Ausdruck? Java Basics - Anfänger-Themen 12
M Zahlenbereich mit RegEx Java Basics - Anfänger-Themen 3
B Hilfe bei Regex - Erstellung Java Basics - Anfänger-Themen 5
D regex Aufbau Frage Java Basics - Anfänger-Themen 4
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
R Rechenzeichen als regex Java Basics - Anfänger-Themen 10
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
F RegEx Problem Java Basics - Anfänger-Themen 8
F Regex Hilfe Java Basics - Anfänger-Themen 14
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
S Regex Pattern Java Basics - Anfänger-Themen 3
K Regex: illegal character range Java Basics - Anfänger-Themen 4
F RegEX Hilfe Java Basics - Anfänger-Themen 8
U Regex für kommaseparierte Zahlen Java Basics - Anfänger-Themen 1
K Operatoren Regex für 10er Zahlen Java Basics - Anfänger-Themen 8
V Java Regex richtig parsen Java Basics - Anfänger-Themen 2
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
N mein RegEx Java Basics - Anfänger-Themen 2
C Lösung für RegEx in Java gesucht Java Basics - Anfänger-Themen 2
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
M Regex/matcher Java Basics - Anfänger-Themen 2
T Methoden String.matches() - Regex Java Basics - Anfänger-Themen 2
truesoul Regex für www Java Basics - Anfänger-Themen 0
N Methoden Straßennamen und Hausnummer - RegEx Java Basics - Anfänger-Themen 19
W Erste Schritte Regex negieren Java Basics - Anfänger-Themen 3
W String match mit Wildcard ODER Regex Java Basics - Anfänger-Themen 1
E useDelimiter-Anwednung / Regex Java Basics - Anfänger-Themen 2
C java regex Java Basics - Anfänger-Themen 2
C Regex zum matchen ausserhalb von Tags Java Basics - Anfänger-Themen 3
O Regex zwischenspeichern Java Basics - Anfänger-Themen 6
O Regex Java Basics - Anfänger-Themen 5
R Einfacher Regex Java Basics - Anfänger-Themen 3
V RegEx Java Basics - Anfänger-Themen 15
HoloYoitsu Datentypen replaceAll() mit regex? Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
G verwendung von regex Java Basics - Anfänger-Themen 3
X Regex splitten Java Basics - Anfänger-Themen 5
T Regex Problem Java Basics - Anfänger-Themen 4
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
N Regex Java Basics - Anfänger-Themen 4
F String.replaceAll() funktioniert nicht richtig oder habe ich den falschen Regex?? Java Basics - Anfänger-Themen 3
J Regex mit Return Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben