[Java] HashMap Frage und String.replace Problem

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Smokers, 17. Juni 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 17. Juni 2010
    HashMap Frage und String.replace Problem

    Hallöchen,

    wiedermla 2 kleine Dinge.


    Als erstes mal habe ich einen String address der beinhaltet :
    Code:
    ;HansWurst-Meiser-Straße 1\n38854 Ortschaft;;;;;
    Ich will das alle ";" in Zeilenumbrüche umgewandelt werden und das vorhandene \n interpretiert wird.
    Also mache ich :

    Code:
     adress = adress.replace(';', '\n');
     JOptionPane.showMessageDialog(null,adress);
    
    Alle ; wurden ersetzt und sind nun \n's außer das in der Mitte.
    Selbst wenn ich mal adress = adress.replace('\n', 'X'); mache funzt es nicht, ebenso wie replaceAll("\n"," "); etc... woran liegt das ?! wie umgehe ich das!? etc....


    ______________________________________________________________
    2te Frage,.... wie iteriere ich durch eine Hashmap ohne die Keys zu kennen?!

    zZ ist es so :

    Code:
    for(int i=0;i<lines.size();i++){
     if(lines.get(i).toString().startsWith("VERSION"+this.referator)){
     this.addValuesMap("VERSION", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("FN"+this.referator)){
     this.addValuesMap("FN", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("NICKNAME"+this.referator)){
     this.addValuesMap("NICKNAME", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("GND"+this.referator)){
     this.addValuesMap("GND", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("BDAY"+this.referator)){
     this.addValuesMap("BDAY", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("NOTE"+this.referator)){
     this.addValuesMap("NOTE", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("EMAIL;TYPE=INTERNET"+this.referator)){
     this.addValuesMap("EMAIL;TYPE=INTERNET", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("TEL;TYPE=CELL"+this.referator)){
     this.addValuesMap("TEL;TYPE=CELL", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("TEL;TYPE=HOME"+this.referator)){
     this.addValuesMap("TEL;TYPE=HOME", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("ORG"+this.referator)){
     this.addValuesMap("ORG", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("ADR;TYPE=HOME"+this.referator)){
     this.addValuesMap("ADR;TYPE=HOME", (lines.get(i).toString().split(this.referator)[1]) );
     }
     if(lines.get(i).toString().startsWith("item1.URL"+this.referator)){
     this.addValuesMap("item1.URL", (lines.get(i).toString().split(this.referator)[1]));
     }
     }
    Was mehr als ineffektiv ist. Es ist sogar statisch und es kann schwer erweitert werden, ich würde gerne ne 2te innere schleife machen die durch alle elemente iteriert....

    die elemente 'HOME' , 'ORG' stehen nämlich alle in this. valuesMap.
    (Map<String, Object> valuesMap = new HashMap<String, Object>()

    Jedoch kann ich ja in einer HashMap nicht mittels zahlen iterieren sodass die innere schleife schwierig zu nutzen ist..


    Also ich hätte halt gerne sowas wie :


    Code:
    for(int i=0;i<lines.size();i++){
     for(k=0;k<this.valuesMap.size();k++){
     if(lines.get(i).toString().startsWith([U]this.valuesMap[k][/U])) {
     this.addValuesMap([U]this.valuesMap[k][/U], (lines.get(i).toString().split(this.referator)[1]) );
     }
     }
    }
    
    (nur das unterstrichene is wegen der HashMap nicht möglich....)

    Ich hoffe das Problem ist verständlich ^^°

    lg u danke schonmal
     
  2. 17. Juni 2010
    AW: HashMap Frage und String.replace Problem

    Vorab: Ich kann kein Java.
    Aber dein erstes Problem könnte möglicherweise so behoben werden:

    Code:
    adress = adress.replace(';', '\n');
    adress = adress.replace('\\n', '\n');
    
    Wenn du direkt nach '\n' suchst, interpretiert er diesen Audruck ja schon. Du musst also erst den Backslash escapen damit er selbst das 'n' nicht escapt
     
  3. 17. Juni 2010
    AW: HashMap Frage und String.replace Problem

    Ersetze zuerst den String "\n" (escaped: \\n) mit dem Zeichen '\n'. Dann kriegst du den Zeilenumbruch. Danach ersetzt du alle ';' zu '\n';
     
  4. 17. Juni 2010
    AW: HashMap Frage und String.replace Problem

    okay Problem 1gelöst

    es war :
    warum auch immer -.- ?!


    jetzt nurnoch Problem 2, HashMap^^°
    #########################################################################

    wenn ich euch richtig verstanden habe dürfte es JETZT :

    Code:
    adress = adress.replace('\n',';');
     adress = adress.replaceAll("\n", ";");
     adress = adress.replaceAll("\\n", ";");
     JOptionPane.showMessageDialog(null,adress);
     adress = adress.replace(';', '\n');
    In jedem Fall nicht mehr drin stehen.
    (btw: replace(char,char); replaceAll(String,String);


    So mein Ergebnis von diesem Quellcode stückchen :

    Code:
    adress = adress.replace('\n',';');
    adress = adress.replaceAll("\n", ";");
    adress = adress.replaceAll("\\n", ";");
    adress = adress.replace(';', '\n');
    textAreaAddress.setText(adress);
    
    In der TextArea steht :



    //edit :

    adress = adress.replace('\\n', '\n'); ->< geht nicht weil ' \\n' kein char ist.
     
  5. 17. Juni 2010
    AW: HashMap Frage und String.replace Problem

    Zu Problem 2: Wie gehe ich durch eine HashMap wenn ich die Keys nicht kenne.

    Map<String,Integer> map = new HashMap<String,Integer>();

    for(String s : map.keySet() )
    {
    map.get(s);
    }

    Das solltest du auf dein Problem ummünzen können.


    Zu Problem 1:

    StringBuilder sb = new StringBuilder( adresse );
    sb.replaceAll("\n", ";").replace(";","\\n");

    sollte gehen.
     
  6. 17. Juni 2010
    AW: HashMap Frage und String.replace Problem

    String.replaceAll() erwartet als ersten Parameter einen regulären Ausdruck. Da der Backslash bei Regex selbst auch als escape Zeichen genutzt wird, muss jeder Backslash auch wieder escaped werden. aus "\\n" wird dadurch also "\\\\n".

    Leider gibt es in Java keine Raw Strings um das zu umgehen. (Aber wenn man es weiß ist es eigentl kein Problem mehr)

    greez
     
  7. 17. Juni 2010
    AW: HashMap Frage und String.replace Problem

    Hey danke leute eure beiden lösungenhaben beide gefunzt =)
    Ich hab mich aber für die doppelt exaped variante entschieden....


    hast recht, wenn man es weiß gehts ja =)

    MIt der Hashmap danke an Micro86 ;-) funzt 1a

    zu =)
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.