1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • 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
  • derbrain
    6
    derbrain
    Mitglied
    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
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    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|

    lg, Benjamin Ferrari, bookworm.at

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    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

    I like Toast!

  • derbrain
    6
    derbrain
    Mitglied
    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
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    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();

    lg, Benjamin Ferrari, bookworm.at

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    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
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    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!

    lg, Benjamin Ferrari, bookworm.at

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    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
    1
    MaSTeR-tobias
    Mitglied
    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
    12
    Trux
    Mitglied
    Reaktionen
    26
    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.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung