需要以某种方式获取这两个txt文件作为我的键和值,我得到列表中的第一个工作,但需要从两个txt文件映射所有单词..我认为发生了什么是我不解析正确地通过文件。我能够System.out.println(..)的内容,但我收到的值为null,所以我在这里缺少一些大的东西。无论如何新程序员在这里这是我的第一篇文章。您好! =)
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
//Create map structure **must have import
Map engJapDictionary = new HashMap<String,String>();
//user input
Scanner in = new Scanner(System.in);
System.out.print("Enter phrase for translation: ");
//name the user input
String name = in.next();
System.out.println( "You wrote: " + name );
//Load Eng and Jap
String fileName = "word.txt";
String fileName1 = "word2.txt";
String line = null;
String line2= null;
try {
FileReader fileReader = new FileReader(fileName);
FileReader fileReader1 = new FileReader(fileName1);
BufferedReader bufferedReader = new BufferedReader(fileReader);
BufferedReader bufferedReader1 = new BufferedReader(fileReader1);
while ((line = bufferedReader.readLine()) != null) {
String parts[] = line.split("\t");
while ((line2 = bufferedReader1.readLine()) != null) {
String parts2[] = line2.split("\t");
engJapDictionary.put(parts[0], parts2[0]);
//for each entry in both txt files iterate through i think here. the .put works only for the first entry in both txt files.. =(
continue;
//System.out.println(engJapDictionary +"\n");
//System.out.println(line);
}
}
}catch (IOException e){}
//Size of the Dictionary!
System.out.println("The number of entries is: " + engJapDictionary.size());
// English to Japanese Dictionary
//Building dictionary the long way
engJapDictionary.put("me", "Watashi");
engJapDictionary.put("you", "anata");
engJapDictionary.put("hat", "boshi");
engJapDictionary.put("cat", "neko");
engJapDictionary.put("dream", "yume");
engJapDictionary.put("house", "uchi");
engJapDictionary.put("dog", "inu");
// System.out.println(engJapDictionary.get("you"));
// System.out.println(engJapDictionary.get("hat"));
// System.out.println(engJapDictionary.get("cat"));
// System.out.println(engJapDictionary.get("dream"));
// System.out.println(engJapDictionary.get("house"));
// System.out.println(engJapDictionary.get("dog"));
System.out.println( "Japanese word: " + engJapDictionary.get(name ) );
System.out.println(engJapDictionary.get(name));
System.out.println(engJapDictionary.containsKey(name));
//Print the keys!!
//System.out.println("\n" + engJapDictionary.keySet());
//Print the values!!
//System.out.println(engJapDictionary.values());
}
}
答案 0 :(得分:2)
您正在使用第二个文件的所有单词为第一个文件的第一个单词调用engJapDictionary.put(parts[0], parts2[0]);
。然后,您不会在Map
中放置第一个文件的任何其他单词,因为您在内循环的第一次运行中完成了对第二个文件的迭代,因此line2 = bufferedReader1.readLine()
返回null
}。
您不需要嵌套循环,只需要在每次迭代中从两个文件中读取一行的单个循环:
while ((line = bufferedReader.readLine()) != null && (line2 = bufferedReader1.readLine()) != null) {
String parts[] = line.split("\t");
String parts2[] = line2.split("\t");
engJapDictionary.put(parts[0], parts2[0]);
}
答案 1 :(得分:0)
null
值。
但我强烈推荐你另一种设计!这两个文件的问题是您需要在两个完全不同的位置管理数据。想象一下,你添加了一个新单词,但不小心你将它们放在两个文件中的不同行 - 受影响的两个索引之间的所有单词都会被破坏......或者如果你没有将单词添加到一个单词中,会发生什么所有文件???
首选包含以下条目的单个文件:
<english word>=<japanese word>
然后你将所有相应的单词连接在一起,你就可以避免上述错误。您迭代一个文件,将行拆分为"="
,然后用
put(parts[0].trim(), parts[1].trim());