2012-05-09 22 views
11

मेरे पास जावा प्रॉपर्टी फ़ाइल है और KEYORDER है। तो मैं नीचे की तरह संपत्ति फ़ाइल लोड करने के बाद कि KEYgetProperty() विधि का उपयोग कर के VALUE पुनः प्राप्त .:स्ट्रिंग टू हैश मैप जावा

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

तो

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

मैं ऊपर स्ट्रिंग से एक HashMap बनाना होगा। SALES,SALE_PRODUCTS,EXPENSES,EXPENSES_ITEMS हैश मैप के KEY और 0,1,2,3,VALUEKEY एस होना चाहिए।

Map<String, String> properties = Splitter.on(",").withKeyValueSeparator(":").split(inputString); 
+2

तो यह वास्तव में दिए गए स्ट्रिंग के लिए है, हार्डकोडेड समाधान रहते हैं। .. यदि नहीं, तो कृपया हमें बताएं कि आपने अभी तक क्या प्रयास किया है और आपकी समस्या क्या है। – pgras

+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/ –

+0

@pgras मैंने अपनी पोस्ट संपादित की है। मुझे लगता है कि अब समझना जटिल नहीं है। Guava में मुझे एक नई चीज़ खोजने के लिए – Bishan

उत्तर

34

उपयोग जोड़े की सूची प्राप्त करने , विभाजक के साथ String.split() विधि:

यदि यह कठिन कोर्डेड है, ऐसा लगता है नीचे की तरह: कि Guava's साथ Splitter.MapSplitter

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

एक foreach का उपयोग करके आप एक पंक्ति बचा सकते हैं! :) – Ayoub

+0

String.split() विधि लिंक टूटा हुआ है – inquisitive

50

आप क्या कर सकते हैं । जोड़ों को दोहराएं और प्रत्येक जोड़ी के लिए कुंजी और मूल्य प्राप्त करने के लिए : विभाजक के साथ split() का उपयोग करें।

Map<String, Integer> myMap = new HashMap<String, Integer>(); 
String s = "SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3"; 
String[] pairs = s.split(","); 
for (int i=0;i<pairs.length;i++) { 
    String pair = pairs[i]; 
    String[] keyValue = pair.split(":"); 
    myMap.put(keyValue[0], Integer.valueOf(keyValue[1])); 
} 
+5

+1! – pgras

+1

कृपया ध्यान दें कि यह एक अपरिवर्तनीय सूची – xilef

+1

@xilef देता है और यह इसका सबसे अच्छा हिस्सा है! –

2

कोई कुंजी मान लिया जाये कि या तो ',' या ':' शामिल हैं:

Map<String, Integer> map = new HashMap<String, Integer>(); 
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])); 
} 
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

0

String s = "SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3"; 
    HashMap<String,Integer> hm =new HashMap<String,Integer>(); 
    for(String s1:s.split(",")){ 
     String[] s2 = s1.split(":"); 
     hm.put(s2[0], Integer.parseInt(s2[1])); 
    } 
2

उपयोग StringTokenizer स्ट्रिंग पार्स करने का प्रयास करें।

String s ="SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3"; 
    Map<String, Integer> lMap=new HashMap<String, Integer>(); 


    StringTokenizer st=new StringTokenizer(s, ","); 
    while(st.hasMoreTokens()) 
    { 
     String [] array=st.nextToken().split(":"); 
     lMap.put(array[0], Integer.valueOf(array[1])); 
    } 
0

आप जेसन से JSONObject क्लास का भी उपयोग कर सकते हैं।org यह करने के लिए JSON स्ट्रिंग जो अच्छी तरह से स्वरूपित किया गया है करने के लिए अपने HashMap में परिवर्तित कर देंगे

उदाहरण:

Map<String,Object> 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 
11

एक पंक्ति में:

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

विवरण:

1) स्प्लिट प्रविष्टि जोड़े और List<String> को स्ट्रिंग सरणी परिवर्तित आदेश Java 1.8

Arrays.asList(str.split(",")) 
से java.lang.Collection.Stream एपीआई का उपयोग करने में

2) परिणामी स्ट्रिन मानचित्र ग्राम सूची "key:value" [0] कुंजी के रूप में और [1] मूल्य के रूप में

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

3) के साथ एक स्ट्रिंग सरणी के लिए उत्परिवर्तित को

collect(Collector<? super String, Object, Map<Object, Object>> collector) 

4) का प्रयोग करें Collectors.toMap() स्थिर धारा एपीआई से collect टर्मिनल विधि का उपयोग करें विधि जो इनपुट प्रकार से कुंजी और मूल्य प्रकार में उत्परिवर्तन करने के लिए दो फ़ंक्शन लेती है।

toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper) 

जहां टी इनपुट प्रकार है, के कुंजी प्रकार और यू मान प्रकार है।

5) लैम्ब्डा String मूल्य के लिए महत्वपूर्ण String करने और StringInteger उत्परिवर्तित

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



Java 8 साथ स्ट्रीम और लैम्ब्डा शैली का आनंद लें के बाद।कोई और लूप नहीं!

+1

मुझे ध्वजांकित किया जा सकता है लेकिन मुझे कहना होगा, पवित्र बकवास! मैं कभी नहीं जानता था कि जावा यह शक्तिशाली था। – WeirdElfB0y

+2

यह "एक पंक्ति" भविष्य के रखरखाव करने वालों को दुःस्वप्न देगी –

0
String mapString=hasmap.toString(); 

Pattern p = Pattern.compile("[\\{\\}\\=\\, ]++"); 

String[] split = p.split(mapString); 

अधिक जानकारी के लिए क्लिक करें here

0

मैं का उपयोग करना चाहिये com.fasterxml.jackson.databind.ObjectMapper (Maven रेपो लिंक: https://mvnrepository.com/artifact/com.fasterxml.jackson.core) की तरह

final ObjectMapper mapper = new ObjectMapper(); 
Map<String, Object> mapFromString = new HashMap<>(); 
try { 
    mapFromString = mapper.readValue(theStringToParse, new TypeReference<Map<String, Object>>() { 
     }); 
} catch (IOException e) { 
    LOG.error("Exception launched while trying to parse String to Map.", e); 
} 
संबंधित मुद्दे