字符串到HashMap JAVA

我有一个Java属性文件,并且有一个KEY作为ORDER 。 所以我在加载属性文件后使用getProperty()方法检索该KEYVALUE ,如下所示:

 String s = prop.getProperty("ORDER"); 

然后

 s ="SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3"; 

我需要从上面的字符串创建一个HashMap。 SALES,SALE_PRODUCTS,EXPENSES,EXPENSES_ITEMS应该是HashMap的KEY0,1,2,3,应该是KEYVALUE

如果它很硬,看起来如下:

 Map myMap = new HashMap(); myMap.put("SALES", 0); myMap.put("SALE_PRODUCTS", 1); myMap.put("EXPENSES", 2); myMap.put("EXPENSES_ITEMS", 3); 

使用String.split()方法和,分隔符来获取对列表。 迭代对并再次使用split(): separator来获取每对的键和值。

 Map myMap = new HashMap(); String s = "SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3"; String[] pairs = s.split(","); for (int i=0;i 

你可以用Guava的 Splitter.MapSplitter做到这一点:

 Map properties = Splitter.on(",").withKeyValueSeparator(":").split(inputString); 

在一行中:

 HashMap map = (HashMap) Arrays.asList(str.split(",")).stream().map(s -> s.split(":")).collect(Collectors.toMap(e -> e[0], e -> Integer.parseInt(e[1]))); 

细节:

1)拆分条目对并将字符串数组转换为List ,以便使用Java 1.8 java.lang.Collection.Stream API

 Arrays.asList(str.split(",")) 

2)将结果字符串列表"key:value"映射到字符串数组,其中[0]为键,[1]为值

 map(s -> s.split(":")) 

3)使用来自流API的collect终端方法进行变异

 collect(Collector> collector) 

4)使用Collectors.toMap()静态方法,它使用两个Function来执行从输入类型到键和值类型的变换。

 toMap(Function keyMapper, Function valueMapper) 

其中T是输入类型,K是键类型,U是值类型。

5)遵循lambda mutate String to String key和String to Integer

 toMap(e -> e[0], e -> Integer.parseInt(e[1])) 

使用Java 8享受流和lambda风格。 没有更多的循环!

假设没有键包含','':'

 Map map = new HashMap(); for(final String entry : s.split(",")) { final String[] parts = entry.split(":"); assert(parts.length == 2) : "Invalid entry: " + entry; map.put(parts[0], new Integer(parts[1])); } 

使用StringTokenizer来解析字符串。

 String s ="SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3"; Map lMap=new HashMap(); StringTokenizer st=new StringTokenizer(s, ","); while(st.hasMoreTokens()) { String [] array=st.nextToken().split(":"); lMap.put(array[0], Integer.valueOf(array[1])); } 

您可以使用拆分来执行此操作:

  String[] elements = s.split(","); for(String s1: elements) { String[] keyValue = s1.split(":"); myMap.put(keyValue[0], keyValue[1]); } 

不过,我自己会选择基于番石榴的解决方案。 https://stackoverflow.com/a/10514513/1356883

您还可以使用json.org中的JSONObject类将此HashMap转换为格式良好的JSON字符串

例:

 Map map = new HashMap<>(); map.put("myNumber", 100); map.put("myString", "String"); JSONObject json= new JSONObject(map); String result= json.toString(); System.out.print(result); 

结果:

 {'myNumber':100, 'myString':'String'} 

你也可以从中得到钥匙

 System.out.print(json.get("myNumber")); 

结果:

 100 

尝试

  String s = "SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3"; HashMap hm =new HashMap(); for(String s1:s.split(",")){ String[] s2 = s1.split(":"); hm.put(s2[0], Integer.parseInt(s2[1])); } 
  String mapString=hasmap.toString(); Pattern p = Pattern.compile("[\\{\\}\\=\\, ]++"); String[] split = p.split(mapString); 

欲了解更多信息,请点击此

我建议使用com.fasterxml.jackson.databind.ObjectMapper (Maven repo link: https : com.fasterxml.jackson.databind.ObjectMapper

 final ObjectMapper mapper = new ObjectMapper(); Map mapFromString = new HashMap<>(); try { mapFromString = mapper.readValue(theStringToParse, new TypeReference>() { }); } catch (IOException e) { LOG.error("Exception launched while trying to parse String to Map.", e); }