任何人都可以告诉我我的java代码有什么问题

时间:2010-10-29 17:57:02

标签: java

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

2 个答案:

答案 0 :(得分: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));
    }
}

答案 1 :(得分:2)

当您调用hashmap.put(key,a)时,您将覆盖现有值,因为您正在为已具有值的键指定值。