如果我有以下文件格式,如何使用Java轻松读取文件:
a|dip
a|dop
c|nap
a|dip
b|dop
b|sip
a|tang
c|dig
c|nap
我希望得到属于“a”,“b”和“c”的所有单词。我可以用什么数据结构来读取和存储这些信息?
您还可以建议一些易于使用Java读取/写入的良好文件格式(两列)。
我知道你们中的一些人可能在想我想要解决的真正问题是什么,我有一些复杂的员工相关数据。当前(差)系统生成一些文件,我正在尝试处理它们以将它们添加到数据库中。当前文件的格式有点复杂(私有),我无法复制过去。
答案 0 :(得分:6)
如果您可以使用Google Guava(http://code.google.com/p/guava-libraries/),那么您将获得一些方便的课程(您可以使用其中的部分或全部):
com.google.common.io.Files
com.google.common.io.LineProcessor<T>
com.google.common.base.Charsets
com.google.common.collect.Multimap<K,V>
com.google.common.collect.ArrayListMultimap<K,V>
例如你可以写:
LineProcessor<Multimap<String, String>> processor =
new LineProcessor<Multimap<String, String>>() {
Multimap<String, String> processed = ArrayListMultimap.create();
public boolean processLine(String line) {
String parts[] = line.split("\\|", 2); // 2 keeps any | in the rest of the line
processed.put(parts[0], parts[1]);
return true; // keep going
}
public Multimap<String, String> getResult() {
return processed;
}
};
Multimap<String, String> result = Files.readLines(
new File("filename.txt"), Charsets.UTF_8, processor);
答案 1 :(得分:3)
您可以使用Scanner一次读取一行文本文件,然后使用String.split("\\|")
分隔该行的部分。为了存储信息,Map<String,List<String>>
可能有用。
答案 2 :(得分:0)
我会使用这种数据结构:
Map<String, List<String>> map = new HashMap<String, List<String>>();
并解析文件:
File file = new File("words.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNext()) {
String next = scanner.next();
String[] parts = next.split("\\|");
String group = parts[0];
String word = parts[1];
List<String> list = map.get(group);
if (list == null) {
list = new ArrayList<String>();
map.put(group, list);
}
list.add(word);
}
所以你可以像这样获得“a”的单词列表:
for (String word : map.get("a")) {
System.out.println(word);
}