2017-02-15 66 views
1

我有一個字符串,我有多個值。密鑰和值由*分隔,整個值由$分隔。將字符串中的值轉換爲散列表?

下面是例子:

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

現在我想把這個值到HashMap中的鍵值對。

下面是我使用的代碼,但沒有將其轉換爲散列表的工作。請指導。

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

開關'*',並在參數''split' $',然後去上班。 – dasblinkenlight

+0

你確定你只有一個給定的鍵的值? – SmashCode

回答

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)); 
     } 
    } 
} 

如果你有多個對於給定的鍵值,然後使用此:

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)); 
     } 
    } 

希望你發現這是很有幫助

+0

如果你有給定鍵的多個值,請讓我知道。 – SmashCode

1

看你的字符串的話,你應該先分割上$(獲得個人鍵值對),然後*(分隔鍵和值)

0

切換'*'和'$'。

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

使用string.split("//$")string.split("//*")爲正則表達式爲您的使用情況。

全碼:

 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

雖然這個代碼片段是受歡迎的,並且可以提供一些幫助,但它會[如果包含解釋](/ meta.stackexchange.com/q/114762)的* how *和* why *會大大改進,這將解決問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

+1

@ nithesh-kumar這是工作,當我做System.out.println(地圖);我有這樣的輸出:{sfd = ghn,abc = pqr,tre = fgt,atr = mnb} –

+0

謝謝@PavloPlynko我已upvoted您的答案:) –