1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

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

    • Frage
  • derbrain
  • 10. Mai 2005 um 22:08
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • derbrain
    Punkte
    365
    Beiträge
    54
    • 10. Mai 2005 um 22:08
    • #1

    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??

  • a9bejo
    Punkte
    4.697
    Beiträge
    913
    • 10. Mai 2005 um 23:06
    • #2

    Hier funkt alles wie erwartet:

    Code
    String str = " w1 w2 w3   w4   ".trim();
    
    
    /*der erste \ ist für java, 
       der zweite für die regex:*/
    String[] words = str.split("\\s+"); 
    
    
    System.out.println("String: |"+str+"|");
    
    
    for(String word : words){
      System.out.println("Word: |"+word+"|");
    }
    Alles anzeigen

    Output:

    Code
    String: |w1 w2 w3   w4|
    Word: |w1|
    Word: |w2|
    Word: |w3|
    Word: |w4|
  • davewood
    Punkte
    3.204
    Beiträge
    536
    • 10. Mai 2005 um 23:06
    • #3

    schreib mal was du genau mit dem string machen willst, das der "compiler" \s als illegalen escape char ansieht hatte ich auch, ka wieso.

    david

  • derbrain
    Punkte
    365
    Beiträge
    54
    • 11. Mai 2005 um 00:17
    • #4
    Zitat von a9bejo

    Hier funkt alles wie erwartet:

    Code
    String str = " w1 w2 w3   w4   ".trim();
    
    
    /*der erste \ ist für java, 
       der zweite für die regex:*/
    String[] words = str.split("\\s+"); 
    
    
    System.out.println("String: |"+str+"|");
    
    
    for(String word : words){
      System.out.println("Word: |"+word+"|");
    }
    Alles anzeigen

    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?

  • a9bejo
    Punkte
    4.697
    Beiträge
    913
    • 11. Mai 2005 um 07:17
    • #5
    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();
  • lerod
    Punkte
    1.620
    Beiträge
    315
    • 11. Mai 2005 um 08:11
    • #6

    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:

  • a9bejo
    Punkte
    4.697
    Beiträge
    913
    • 11. Mai 2005 um 08:19
    • #7
    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!

  • lerod
    Punkte
    1.620
    Beiträge
    315
    • 11. Mai 2005 um 14:58
    • #8

    oh sry, irgendwie dürft i da heut morgen was falsch aufgefaßt haben - hätt mich auch gewundert, wenns ned funktionieren hätt sollen.

    lg

  • MaSTeR-tobias
    Punkte
    5
    Beiträge
    1
    • 10. Januar 2006 um 23:35
    • #9

    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:)

  • Trux
    Punkte
    1.396
    Beiträge
    274
    • 11. Januar 2006 um 01:04
    • #10

    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()+"|");
    }
  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum