2010-10-29 2 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 может только магазин one value за ключ.

Если вы хотите сохранить несколько глаголов для ключа "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

+0

есть, есть ли способ, чтобы получить значения, как один за другим, как [именная группа, глагольная группа], как именная группа, а затем глагольная группа – raju

+0

Есть реализация нескольких карт уже существующих, например, в коллекциях общин Apache или Guave. Если вы используете их, вы можете оставить алгоритм таким, какой он есть. – Wolfgang

2

Вы перезапись существующего значения при вызове hashmap.put (ключ, а), так как вы присваиваете значение к ключу, который уже имеет значение.

Смежные вопросы