Probleme mit Java split() Methode und regex

erik-beck

Grünschnabel
Hallo

ich habe ein kleines Problem mit der split() Methode.

ich habe einen String:

1234 'BLA BLA' 'TEST' 12. 12 34. 'TEST'

den möchte ich am Leerzeichen aufteilen. Aber nur bei den Leerzeichen die nicht in ' 'sind.

Bei dem String oben soll dann rauskommen:

1. 1234
2. BLA BLA
3. TEST
4. 12.
5. 12
6. 34.
7. TEST

Bisher hab ichs so versucht:

str.split("[^']\\'") :(

aber das funktioniert leider nicht so wie ich das will. Vielleicht kann mir jemand helfen.

Viele Grüße

Erik
 
vielleicht so:
Java:
Sting [] cache = str.split("'"); // also nach ' splitten
// und dann alle ungeraden Strings im Array nach Leerzeichen splitten
ArrayList <String> result = new ArrayList <String> ();
for (int i=0; i<cache.length; i++)
    if (i%2 == 0)
        result.add(cache[i]);
    else
        Collections.addAll(result, cache[i].split());
habs nicht getestet und war nur nen spontaner gedanke
grüße, cymatoxa
 
naja, dann halt
Java:
if (i%2 != 0)
:D wie gesagt, habs bisher nicht getestet. Jetzt noch mal der komplette Code für deine Lösung:
Java:
public String [] split(String str) {
    String [] cache = str.split("'");
    ArrayList <String> result = new ArrayList <String> ();
    for (int i=0; i<cache.length; i++)
        if (i%2 != 0)
            result.add(cache[i]);
        else
            Collections.addAll(result, cache[i].split(" "));
    return result.toArray(new String [] {});
}

Damit gehts, grüße
Cymatoxa
 
Hey,

du kannst es auch mal mit Look-Around-Assertion probieren. Auf diese Weise kannst du Leerzeichen suchen, welche bestimmten Bedingungen nachfolgen bzw. vorausgehen oder eben genau dies nicht tun. Beim Splitten wird dann auch nur das Leerzeichen berücksichtigt.
--> http://de.wikipedia.org/wiki/Regulärer_Ausdruck#Look-around_assertions

Edit: Ich bin gerade noch auf eine Klasse gestoßen, die soweit nichts mit regulären Ausdrucken zutun hat, aber aufgrund des folgenden Satzes nützlich aussieht:
The StreamTokenizer class takes an input stream and parses it into "tokens", allowing the tokens to be read one at a time. The parsing process is controlled by a table and a number of flags that can be set to various states. The stream tokenizer can recognize identifiers, numbers, quoted strings, and various comment styles.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück