2012-04-26 70 views
-1

我想檢查一個LinkedHashmap的值是否已經包含一個字符串,如果沒有,將它添加到ArrayList中。 windowSize是1和7(預定)檢查一個字符串是否已經在LinkedHashMap中(作爲一個值)

之間
String wholeString = "HausA HausB"; 

final Map<String, ArrayList<String>> generateMap = new LinkedHashMap<String, ArrayList<String>>(); 
final int limit = wholeString.length() - windowSize; 
    for (int i = 0; i < limit; i++) { 
     String first = wholeString.substring(i, i + windowSize); 
     String second = wholeString.substring(i + windowSize, i 
       + windowSize + 1); 

     int endKey = i + windowSize; 
     if (!generateMap.containsKey(first)) { 
      generateMap.put(wholeString.substring(i, endKey), 
        new ArrayList<String>()); 
     } 
        //check here if the String 'second' is already mapped to the key' 
        if (i < limit && !generateMap.get(first).equals(second)) { 
      generateMap.get(first).add(second); 
     } else { 
      generateMap.get(first).add(null); 
     } 
    } 

    for (Entry<String, ArrayList<String>> e : generateMap.entrySet()) { 
     System.out.println(e.getKey() + " -> " + e.getValue()+ "\n"); 
    } 

現在的輸出:

HausA -> [ ] 
ausA -> [H] 
usA H -> [a] 
sA Ha -> [u] 
A Hau -> [s] 
Haus -> [B] 
HausB -> [ ] 

如何應該是:

HausA -> [ ] 
ausA -> [H] 
usA H -> [a] 
sA Ha -> [u] 
A Hau -> [s] 
Haus -> [A,B] //<--- 
HausB -> [ ] 

謝謝您的理解幫助。

+1

參見:[堆棧溢出不會閱讀所有](http://meta.stackexchange.com/a/129787/172496) – 2012-04-26 20:06:23

+0

你應該**真的**考慮使用[Guava Multimap](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html)。 @BrianRoach呃,那真的不是那麼多的代碼。 – 2012-04-26 20:06:50

+0

@MДΓΓБДLL但是沒有真正的描述它應該做什麼。當然,這裏有所需的輸出,但代碼複雜,爲什麼這應該是輸出會有所幫助。 – Jochen 2012-04-26 20:07:58

回答

1

請參閱如何適應...

final String wholeString = " HausA HausB"; 
final Map<String, Set<String>> generateMap = new LinkedHashMap<String, Set<String>>(); 
final int windowSize = 5; 

final int limit = wholeString.length() - windowSize; 
for (int i = 0; i < limit; i++) { 
    final int endKey = i + windowSize; 
    final String 
     first = wholeString.substring(i, endKey), 
     second = wholeString.substring(endKey, endKey + 1); 
    if (!generateMap.containsKey(first)) 
    generateMap.put(first, new HashSet<String>()); 
    generateMap.get(first).add(second); 
} 

for (Entry<String, Set<String>> e : generateMap.entrySet()) { 
    System.out.println(e.getKey() + " -> " + e.getValue()); 
} 
相關問題