2010-10-29 81 views
0
import java.util.Arrays; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 
import java.util.Stack; 
import java.util.StringTokenizer; 


public class shift { 

    @SuppressWarnings("unchecked") 
    public static void main(String args[]) 
    { 


     String speech = "Sentence:NounPhrase VerbPhrase:NounPhrase :Art Noun:VerbPhrase : Verb | Adverb Verb: Art : the | a : Verb :jumps | sings |: Noun:dog | cat | "; 

     HashMap<String, String> hashmap = new HashMap<String, String>(); 
     String a; 
     StringTokenizer st = new StringTokenizer(speech,":"); 

     while (st.hasMoreTokens()) { 
      String key=st.nextToken().trim(); 
      String value=st.nextToken().trim(); 



      StringTokenizer st1 = new StringTokenizer(value,"|"); 

      while (st1.hasMoreTokens()) { 

       a=st1.nextToken().trim(); 

       hashmap.put(key, a); 


      } 


     } 


     Set set = hashmap.entrySet(); 
     Iterator ia = set.iterator(); 





    while(ia.hasNext()) { 
    Map.Entry me = (Map.Entry)ia.next(); 

      System.out.println(me.getKey()+"->"+me.getValue()); 


    } 
} 

} 

the output is 
Noun->cat 
NounPhrase->Art Noun 
Art->a 
Sentence->NounPhrase VerbPhrase 
Verb->sings 
VerbPhrase->Adverb Verb 

该代码缺少一些值作为the jumps etc are not show任何一个可以告诉我什么是错误的,我的Java代码

回答

6

不知道我完全得到你的问题返回这样,但请记住,一个HashMap能仅存储每个密钥的一个值

如果你想存储多个动词为重点"Verb",那么你就必须声明使用类似的地图:

HashMap<String, Set<String>> hashmap = new HashMap<String, Set<String>>(); 

并存储"Verb"一组映射的话。

下面是代码的刷了(工作)版本:

import java.util.*; 
public class Shift { 

    public static void main(String args[]) { 

     String speech = "Sentence:NounPhrase VerbPhrase:NounPhrase :Art " + 
         "Noun:VerbPhrase : Verb | Adverb Verb: Art : the | " + 
         "a : Verb :jumps | sings |: Noun:dog | cat | "; 

     Map<String, Set<String>> hashmap = new HashMap<String, Set<String>>(); 

     StringTokenizer st = new StringTokenizer(speech, ":"); 

     while (st.hasMoreTokens()) { 
      String key = st.nextToken().trim(); 
      String value = st.nextToken().trim(); 

      StringTokenizer st1 = new StringTokenizer(value, "|"); 

      while (st1.hasMoreTokens()) { 
       String a = st1.nextToken().trim(); 

       if (!hashmap.containsKey(key)) 
        hashmap.put(key, new HashSet<String>()); 

       hashmap.get(key).add(a); 
      } 
     } 

     for (String key : hashmap.keySet()) 
      System.out.printf("%s -> %s%n", key, hashmap.get(key)); 
    } 
} 
+0

喔那这个问题我有一个键多个值 – raju 2010-10-29 18:02:47

+0

是有办法通过一个希望得到的值作为一个[NounPhrase,主谓短语作为NounPhrase然后主谓短语 – raju 2010-10-29 18:15:15

+0

有实现多地图已经存在,例如在Apache Commons Collections或Guave中。如果你使用这样的话,你可以保持算法不变。 – Wolfgang 2010-10-29 18:18:12

2

当你调用hashmap.put(键,)你覆盖现有的价值,因为你分配一个值到一个已经有价值的钥匙。

相关问题