2017-02-15 3 views
1

Ich habe eine Zeichenfolge, wo ich mehrere Werte habe. Der Schlüssel und der Wert werden durch * getrennt und der gesamte Wert wird durch $ getrennt.Wert in String in hashmap konvertieren?

Unten ist das Beispiel:

String agf = "abc*pqr$sfd*ghn$atr*mnb$tre*fgt"; 

Und nun möchte ich den Wert dieses in hashmap in Schlüsselwertpaar setzen.

Unten ist der Code, den ich verwendet habe, aber nicht für die Konvertierung in hashmap funktioniert. Bitte führen.

String agf = "abc*pqr$sfd*ghn$atr*mnb$tre*fgt"; 

String []tmp = StringUtils.split(agf,'*'); 
for (String v : tmp) { 
    String[] t = StringUtils.split(v,'$'); 
    map.put(t[0], t[1]); 
} 
+4

Schalter '*' und '$' in den Argumenten zu 'split', dann zu arbeiten, es geht. – dasblinkenlight

+0

Sind Sie sicher, dass Sie nur einen Wert für einen bestimmten Schlüssel hatten? – SmashCode

Antwort

1
import java.util.HashMap; 
import java.util.Map; 

public class Parse{ 
    public static void main(String ...args){ 
     String agf = "abc*pqr$sfd*ghn$atr*mnb$tre*fgt"; 
     String [] split = agf.split("\\$"); 
     Map<String,String> map = new HashMap<String,String>(); 
     for(String temp : split){ 
      String [] tempo = temp.split("\\*"); 
      map.put(tempo[0],tempo[1]); 
     } 
     for(String mapkeys : map.keySet()){ 
      System.out.println(mapkeys+" ::: "+map.get(mapkeys)); 
     } 
    } 
} 

wenn Sie hatte mehrere Werte für einen bestimmten Schlüssel dann verwenden:

public static void main(String ...args){ 
     String agf = "abc*pqr*gas$sfd*ghn$atr*mnb$tre*fgt"; 
     String [] split = agf.split("\\$"); 
     Map<String,String> map = new HashMap<String,String>(); 
     for(String temp : split){ 
      String [] tempo = temp.split("\\*"); 
      StringJoiner sj = new StringJoiner(","); 
      for(int i = 1; i < tempo.length;i++){ 
       sj.add(tempo[i]); 
      } 
      String value = sj.toString(); 
      map.put(tempo[0],value); 
     } 
     for(String mapkeys : map.keySet()){ 
      System.out.println(mapkeys+" ::: "+map.get(mapkeys)); 
     } 
    } 

Hoffe, dass Sie diese Informationen hilfreich

gefunden 10
+0

Wenn Sie mehrere Werte für den angegebenen Schlüssel hatten, lassen Sie es mich wissen. – SmashCode

1

bei Ihrem Beispiel Zeichenfolge suchen, sollten Sie zuerst auf $ werden Aufspalten (einzelne Schlüsselwertepaare zu erhalten) und dann auf * (trennen Schlüssel und Werte)

0

Schalter '*' und '$'.

String agf = "abc*pqr$sfd*ghn$atr*mnb$tre*fgt"; 
String []tmp = StringUtils.split(agf,'$'); 
for (String v : tmp) { 
    String[] t = StringUtils.split(v,'*'); 
    map.put(t[0], t[1]); 
} 
0

Verwenden string.split("//$") und string.split("//*") als regex für Ihren Anwendungsfall.

Voll Code:

 String str = "abc*pqr$sfd*ghn$atr*mnb$tre*fgt"; 
     String[] entries = str.split("\\$"); 

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

     for (int i=0; i<entries.length; i++) { 
      String[] entry = entries[i].split("\\*"); 
      map.put(entry[0], entry[1]); 
     } 

     System.out.println("Entries are -> " + map.entrySet()); 
0
String agf = "abc*pqr$sfd*ghn$atr*mnb$tre*fgt"; 

\\next array will contain such elements: "abc*pqr", "sfd*ghn", "atr*mnb", "tre*fgt" 
String[] pairs = agf.split("\\$"); 

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

for (String pair: pairs) { 

    \\in first iteration next array will contain such elements: "abc", "pqr" 
    String[] t = pair.split("\\*"); 

    \\just fill out map with data 
    map.put(t[0], t[1]); 
} 
+0

Während dieses Code-Snippet willkommen ist und vielleicht etwas Hilfe bietet, wäre es [stark verbessert, wenn es eine Erklärung enthielt] (// meta.stackexchange.com/q/114762) von * wie * und * warum * das löst das Problem Problem. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, nicht nur die Person, die jetzt fragt! Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –

+1

@ nithesh-kumar Das funktioniert, wenn ich System.out.println (map) mache; Ich habe eine solche Ausgabe: {sfd = ghn, abc = pqr, tre = fgt, atr = mnb} –

+0

danke @PavloPlynko ich hatte Ihre Antwort upvoted :) –