Parameterauswertung mit regular Expression

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi erstmal,

bin neu hier und hoffe, hier die nötige Hilfe zu finden. Und natürlich auch nötige Hilfe zu geben, wenn es möglich ist! ;-)

Hier mein Problem:

Ich habe einen String, den ich in ein String-Array splitten muss. Die Regeln sind die gleichen, wie in Java zum Erstellen des String-Arrays für main-Methoden erstellt.
Soll heißen: Der String "ABC 'DE FG' 22" soll in ein Array mit den 3 Elementen "ABC" "'DE FG'" und "22" gesplittet werden. "ABC DEF GHI" in "ABC" "DEF" und "GHI".....

Der Knackpunkt ist das 'DE FG'! Habe schon versucht, mit Lookbehinds zu prüfen, ob das Blank als Trennzeichen gewertet werden soll:

Code:
"(?<='.+) (?=.+')"


Da aber in einem Lookahead keine regulären Ausdrücke wie "+" verwendet werden dürfen, weiß ich nicht weiter.

Weiß zufällig jemand wie Java das macht oder hat eine andere Idee?

Vielen Dank im Voraus!
 
ich denke nicht, dass split eine derartige Beschreibung erhalten kann,

es funktioniert aber:
Code:
public class Test
{
    public static void main(String args[])
        throws Exception
    {
        String st = "ABC 'DE FG' 22 ";
        Pattern p = Pattern.compile("([^ ']+) |('[^']+') ");
        Matcher m = p.matcher(st);
        while (m.find())
        {
            System.out.println("found: " + m.group());
        }
    }
}
vielleicht ist das was für dich,

wichtig: am Ende des Strings noch ein Leerzeichen einfügen, damit die letzte Gruppe gefunden wird

und m.group() enthält dann bisher jeweils das Leerzeichen am Ende, kann gefährlich sein
 
Hey,

ja die Lösung ist gut. Immer ein Leerzeichen hinter den String einfügen ist zwar nicht die hübscheste Variante, aber es erspart mir eine noch schlimmere Arrayverarbeitung.
Dachte an sowas wie:

Code:
String st = "ABC 'DE FG' 22";
String[] tempArr = st.split(" ");
String tempstr = "";
LinkedList<String> templist = new LinkedList<String>();
boolean add = false;

for (String string : tempArr) {
	if(string.startsWith("'")){
		tempstr = string;
		add = true;
	}else if(string.endsWith("'")){
		tempstr += " " + string;
		templist.add(tempstr);
		add = false;
	}else if(add){
		tempstr += " " + string;
	}else{
		templist.add(string);
	}
}

String[] test = (String[])templist.toArray(new String[0]);

Funktioniert auch, ist aber lange nicht so schön wie deine Lösung Slater..
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben