Java Methodensignaturstring splitten

JohnathanSeagul

Lt. Junior Grade Pro
Registriert
Mai 2007
Beiträge
375
Hallo!

Ich habe folgenden String und würde:

java.util.HashMap<java.lang.String,java.lang.String>,java.lang.Object,java.io.Serializable,java.lang.String,int,java.lang.String[]

Würde ihn gerne splitten in:

java.util.HashMap<java.lang.String,java.lang.String>
java.lang.Object
java.io.Serializable
java.lang.String
int
java.lang.String[]

Irgendwie komme ich nicht auf eine passende RegEx für die split Funktion die ich hier gerne verwenden würde.

Kann jemand helfen?

Danke JS
 
Wenns n String ist kannst du ja auch gleich die Spilt-Funktion von einem String Objekt verwenden

Beispiel
Code:
//String aufteilen und abfüllen
String string = "java.util.HashMap<java.lang.String,java.lang.String>,java.lang.Object,java.io.Se rializable,java.lang.String,int,java.lang.String[]";
String[] temp = string.split(",");
List<String> stringList= new ArrayList<>();
		
for(int i =0; i < temp.length ; i++){
	//Alle Werte in die Liste abfüllen
	stringList.add(temp[i]);
}
 
Zuletzt bearbeitet:
Probier's mal damit:
([^>]*)(>),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)

Die Kür ist halt das erste Komma.
Ggf. nimmst Du auch nur ,([^,]*) und packst dann #1#2 im Resulting String zusammen.

Edit: In Gesthos Lösung musst Du halt auch die ersten beiden Arrays zusammen packen.

LG
 
Unnu schrieb:
Probier's mal damit:
([^>]*)(>),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)
LG

Danke Unnu.

Hmmm..entweder mache ich was falsch, oder bei Deiner Lösung kommt ein leeres Array zurück...


java.util.HashMap<java.lang.String und ,java.lang.String>.
Ergänzung ()

Gestho schrieb:
Wenns n String ist kannst du ja auch gleich die Spilt-Funktion von einem String Objekt verwenden

Beispiel
Code:
//String aufteilen und abfüllen
String string = "java.util.HashMap<java.lang.String,java.lang.String>,java.lang.Object,java.io.Se rializable,java.lang.String,int,java.lang.String[]";
String[] temp = string.split(",");
List<String> stringList= new ArrayList<>();
		
for(int i =0; i < temp.length ; i++){
	//Alle Werte in die Liste abfüllen
	stringList.add(temp[i]);
}

Danke Gestho - bei Deiner Lösung wird nicht berücksichtig daß java.util.HashMap<java.lang.String,java.lang.String> nicht aufgesplittet werden darf in java.util.HashMap<java.lang.String und ,java.lang.String>.
 
Zuletzt bearbeitet:
Habe nur den Code von Gestho "verbessert"...
Code:
 String string = "java.util.HashMap<java.lang.String,java.lang.String>,java.lang.Object,java.io.Se rializable,java.lang.String,int,java.lang.String[]";
	    String[] temp = string.split(",");
	    List<String> stringList= new ArrayList<>();
	    for(int i =0; i < temp.length ; i++){
	    //Alle Werte in die Liste abfüllen
	    	if (temp[i].contains("<")) {
	    		String x = (temp[i] + "," + temp[i+1]);
	    		stringList.add(x);
                        i++;
	    	} else {
	    		stringList.add(temp[i]);
	    	}
	    }
 
Zuletzt bearbeitet:
JohnathanSeagul schrieb:
Danke Unnu.

Hmmm..entweder mache ich was falsch, oder bei Deiner Lösung kommt ein leeres Array zurück...

Hm, bei mir im RegexCoach funktioniert's. (Perl, TCL, etc.)
Andererseits, in Java ist es ja wie man sieht ein wenig komplizierter.
Naja, jetzt passt es ja.
 
Unnu schrieb:
Hm, bei mir im RegexCoach funktioniert's. (Perl, TCL, etc.)
Andererseits, in Java ist es ja wie man sieht ein wenig komplizierter.
Naja, jetzt passt es ja.

Der TS suchte einen regulären Ausdruck für String.split, keinen regulären Ausdruck, um die Strings zu matchen - d.h. der Ausdruck gibt nicht an, was herausgefischt werden sollte, sondern wo getrennt werden sollte und muss folglich nur alle Kommas matchen, die nicht in < > stehen. Deshalb ist die Lösung eigentlich einfacher anstatt komplizierter.
 
Zuletzt bearbeitet:
Zurück
Oben