String an bestimmten Stellen zerlegen

Merkur9

Mitglied
Hi,

Also ich habe das Problem, dass ich einen String nur an ganz bestimmten Stellen zerlegen will.
Ich habe natürlich auch schon gegoogelt und die Scanner-Klasse etc. gefunden, aber leider bin ich bis jetzt nicht zurecht gekommen und wäre daher für jede Hilfe dankbar!

Im genauen geht es darum, einen String an jedem Leerzeichen zu zerlegen, bei dem KEIN Komma (also: ",") vor dem Leerzeichen steht und kein eckige Klammer (also: "[") nach dem Leerzeichen folgt.

Als Beispiel:
Den String:
"eins zwei, drei vier [fünf sechs"
würde ich gerne zerlegen in:
"eins"
"zwei, drei"
"vier [fünf"
"sechs"

Wäre super, wenn mir da jemand helfen könnte!

Vielen Dank!
 
Wie wäre es zum Beispiel mit einem regulären Ausdruck und etwas "lookahead und lookbehind Magie" 😉
Java:
public class Main
{
	public static void main(String[] args)
	{
		String[] matches = "eins zwei, drei vier [fünf sechs".split("(?<!,) (?!\\[)");
		for(String s: matches) {
			System.out.println(s);
		}
	}
}
 
Zuletzt bearbeitet:
Ich hätte gesagt, Regex oder selber zussammen wurschteln..

Java:
public class Test {

   public static void main(String[] args) {
      String str = "eins zwei, drei vier [fünf sechs";
      int startToSearch = 0;
      int startToCut = 0;

      while (startToSearch > -1) {
         int end = str.indexOf(" ", startToSearch);
         if(end == -1){
            System.out.println(str.substring(startToCut, str.length()));
            break;
         }else if (str.charAt(end - 1) != ',' && str.charAt(end + 1) != '[') {
            System.out.println(str.substring(startToCut, end));
            startToCut = end + 1;
         }
         startToSearch = end + 1;

      }

   }

Regex: sehr flexibel und performant, aber leider nicht für jeden versändlich
selber zusaemmen wurschteln: kann man vielleicht leichter nachvollziehen, ist aber nicht so flexibel...

Für viele (mich eingeschlossen, wenn ich mein regex cheat scheet nicht neben mir habe) ist reges halt magie...
 
Hallo,

Ich bräuchte dann leider noch einmal eure Hilfe. Ich habe mich jetzt etwas in Reguläre Ausdrücke eingearbeitet, aber mit folgendem habe ich ziemlich Probleme:

Ich habe folgenden String: "class [ Ljava.lang.String;"
Welcher Ausrdurck kann ich nun verwenden, um "String" zurückzubekommen. Das heißt, ich will immer den String haben, der zwischen dem letzten Punkt (".") und dem ";" steht.

VIELEN Dank im voraus!
 
Hi,

ist absolut nicht perfekt und die Profis hier können das sicher besser 😉

Aber das ist meine Lösung:

Java:
private static String test = "class [ Ljava.lang.String;";
    
    public static void main(String[] args) {
        String [] tmp = test.split("\\.");
        String sub = tmp[tmp.length-1].substring(0, tmp[tmp.length-1].length()-1);
        System.out.println(sub);
    }

Java:
Pattern pattern = Pattern.compile("\\.(\\w*)\\;");
Matcher matcher = pattern.matcher(test);
while(matcher.find()) {
System.out.println(matcher.group(1));
}
 
Zuletzt bearbeitet:
StringTokenizer

das könnte dir auch weiterhelfen , hab damals bei meiner Mediathek ( eines meiner ersten projekte ) so meine csv strings aufgespalten die ich aus der speicherdatei ausgelesen hab
 
Stimmt für mich sieht es auch so aus als wenn du da irgendwelche toString Ausgaben parsen möchtest...
Für das Problem gibt es sicher elegantere Lösugnen
 
Bitte nicht auf mich hören,

hab grade in der Depricated API nachgelesen und da steht nix von StringTokenizer.

:rtfm:

😳
 

Zurück
Oben