字符串到HashMap JAVA
我有一个Java属性文件,并且有一个KEY
作为ORDER
。 所以我在加载属性文件后使用getProperty()
方法检索该KEY
的VALUE
,如下所示:
String s = prop.getProperty("ORDER");
然后
s ="SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3";
我需要从上面的字符串创建一个HashMap。 SALES,SALE_PRODUCTS,EXPENSES,EXPENSES_ITEMS
应该是HashMap的KEY
和0,1,2,3,
应该是KEY
的VALUE
。
如果它很硬,看起来如下:
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 super String, Object, Map
4)使用Collectors.toMap()
静态方法,它使用两个Function来执行从输入类型到键和值类型的变换。
toMap(Function super T,? extends K> keyMapper, Function super T,? extends U> 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