好的我有很多问题。我想用一组String关键字填充我的哈希映射。基本上,用户输入一个关键字,如果它与哈希映射中的关键字匹配,则调用parseFile方法。否则,如果用户输入是关键字的同义词,我在哈希映射中搜索原始关键字。但我的问题是填充哈希映射。谁能引导我朝着正确的方向前进?
public static void main(String[] args) throws FileNotFoundException {
/* your synonym map of keywords and you have to populate
it before the user can give values.*/
HashMap<String, String[]> synonymMap = new HashMap<String, String[]>();
populateSynonymMap(); //populate the map
/*Get user response*/
System.out.println("What would you like to know?");
System.out.print("> ");
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine().toLowerCase();
/*first check if the input already is the original one*/
if (synonymMap.containsKey(input)) {
parseFile(input);
} else {
/*if not then search the synonymMap to get the original keyword*/
for (Map.Entry<String,String[]> entry : synonymMap.entrySet()) {
String[] value = entry.getValue();
if (Arrays.asList(value).contains(input)) {
parseFile(entry.getKey());
break;
}
}
}
}
答案 0 :(得分:3)
可能是您可以尝试以下代码。这就是你想要完成的事情。但我认为您需要考虑重新设计您查找关键字同义词的方式。
如果你面临的问题只是填充hashmap,那可能是因为你在main方法中定义了map,然后没有在其他任何地方填充它。
因此,对于第二个选项,您可以在主要方法中更改分配,例如..
synonymMap = populateSynonymMap(); // populate the map
填充地图的示例方法。
private static HashMap<String, String[]> populateSynonymMap() {
HashMap<String, String[]> synonymMap = new HashMap<String, String[]>();
String s[] = new String[] { "x1", "x2", "x3" };
String t[] = new String[] { "y1", "y2", "y3" };
String u[] = new String[] { "z1", "z2", "z3" };
synonymMap.put("x", s);
synonymMap.put("y", t);
synonymMap.put("z", u);
return synonymMap;
}
答案 1 :(得分:0)
您必须定义一个接受Map
来填充
public void populateSynonymMap(Map<String, String[]> synonymsMap)
或在类中声明您的Map
属性,以便在方法中可见。
然后在inside方法中你必须有一个单词和同义词数组:
String word = "synonym";
String[] synonyms = "equivalent,methonim".split(",");
然后将两者都放在地图中:
synonimsMap.put(word, synonyms);
根据需要多次执行(如果很多,为单词定义2个数组,一个String[]
,为synonims定义另一个String[][]
,并迭代它们以更简单的方式填充地图。 ..
String[] words = // populate word array
String[][] synonims = // populate synonims 2d array
for (int c = 0; c < words.length; c++) {
synonimsMap.put(words[c], synonyms[c]);
}
希望这足以引导你......
答案 2 :(得分:0)
而不是将HashMap声明为
HashMap<String, String[]> synonymMap = new HashMap<String, String[]>();
你为什么不声明是
HashMap<String, List<String>> synonymMap = new HashMap<String, ArrayList<String>>();
&安培;然后arrayListObj.add(entry.getValue());
然后它将消除对此Arrays.asList(value)
初始化方法,如
public void populateSynonymMap(String key, List<String> value){
synonymMap.put(key, value);
}
列表中的输入值
List<String> listOne=new ArrayList<String>();
listOne.add("Input String"); //Keep on adding the Strings in this way
//then call the populateSynonymMap method
//Say your key is A
populateSynonymMap("A", listOne);