2017-02-15 96 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您的答案:) –

相关问题