Java: Probleme mit String.trim() und String.split(String)

  • Ich möchte in einem Programm Strings z.B. mit den Methoden split und trim bearbeiten. In die Strings habe ich vorher zum Teil im Code selbst Leerzeichen eingefügt (z.B. myString += " "; )
    Die Methode myString.trim() macht aber gar nichts, und myString.split(" ") funktioniert nicht richtig, wenn der String mit einem Leerzeichen beginnt. Das resultierende String-Array enthält dann als erstes Element einen leeren String. Ein Leerzeichen am Ende wird aber korrekterweise ignoriert. In der Java-Api steht auch: "Trailing empty strings are therefore not included in the resulting array." Aber eben anscheinend nur TRAILING empty strings, also am Ende und nicht am Anfang.
    Jenenfalls wollte ich das mit trim() umgehen, aber das geht ja anscheinend auch nicht! Ich kann mich erinnern, dass es früher mal ging. Kann das am Zeichensatz liegen? Denn wenn ich als Argument für split "\s" eingebe, um ALLE Whitespaces als Trennzeichen zu akzeptieren, dann meint der Compiler, das wär ein "illegal escape character". Wie macht man so was richtig??

  • Hier funkt alles wie erwartet:

    Output:

    Code
    String: |w1 w2 w3   w4|
    Word: |w1|
    Word: |w2|
    Word: |w3|
    Word: |w4|
  • Zitat von a9bejo

    Hier funkt alles wie erwartet:

    wofür ist denn eigentlich das + in str.split("\\s+")?
    ich habs nochmal so probiert wie dus gemacht hast. erstaunlicherweise ist es ein unterschied, ob man

    Code
    String s = " 1 2 3 ";
    	  s.trim();

    oder

    Code
    String s = " 1 2 3 ".trim();

    schreibt. letztere ist ja die variante, wie du sie auch verwendet hast. aber funktioniert die erste bei dir?

  • Zitat von derbrain

    wofür ist denn eigentlich das + in str.split("\\s+")?

    die methode String.split(String) erwartet eine Regular Expression, und + heisst in einer RE: 'das vorige zeichen kommt mindestens einmal oder öfter vor'. D.h ohne das + würde der string "a b" in "a" und " b" aufgesplittet werden, mit dem + in "a" und "b".


    Zitat von derbrain


    ich habs nochmal so probiert wie dus gemacht hast. erstaunlicherweise ist es ein unterschied, ob man

    Code
    String s = " 1 2 3 ";
    	  s.trim();

    oder

    Code
    String s = " 1 2 3 ".trim();

    schreibt. letztere ist ja die variante, wie du sie auch verwendet hast. aber funktioniert die erste bei dir?

    Methoden können immer entweder den zustand ihres objekts selbst verändern (dass nennt man dann 'descructive method', weil der alte zustand zerstört wird), oder sie erzeugen ein neues objekt, verändern dessen zustand und geben es dann als Rückgabewert zurück. Letzteres kommt in Java öfter vor.

    Die Methode trim() ist z.b nicht destruktiv, d.h Du must schreiben:

    Code
    String str = " 1 2 3  ";
    str = str.trim();
  • was ich dann trotzdem nicht ganz versteh ist, warum

    Code
    String str = " 1 2 3 ".trim();



    dieser code nicht funktionieren sollte. immerhin ist " 1 2 3 " ein string der getrimmt und einer anderen variablen zugewiesen wird.

    wo liegt nun der feiner unterschied? :confused:

  • Zitat von lerod

    was ich dann trotzdem nicht ganz versteh ist, warum

    Code
    String str = " 1 2 3 ".trim();



    dieser code nicht funktionieren sollte.

    Hallo lerod!

    Wo steht denn, das es so nicht funktionieren sollte?
    Bei mir klappt das ganz wunderbar!

  • Quote:

    for(String word : words){
    System.out.println("Word: |"+word+"|");
    }


    kann man diese "for"-schleife (glaube das ist es) auch anders schreiben? wenn ja wie?
    thx for reply, bin neu hier:)

  • MaSTeR-tobias:

    ja kann man. das hängt jedoch davon ab um was es sich sich bei words handelt.
    ist words ein Array so könntest du schreiben:

    PHP
    for (int i=0; i < words.length; i++){
    
         System.out.println("Word: |"+words[i]+"|");
    }

    ist words eine ArrayList so könntest du schreiben:

    PHP
    Iterator<String> it = words.iterator();
    
    
    while(it.hasNext()){
    
    
         System.out.println("Word: |"+ it.next()+"|");
    }

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!