我正在尝试通过读入文本文件来使用HashSet创建字典。这是有效的,但每次我读入一个新的文本文件时,都会覆盖前一个文本文件中的HashSet的内容。我想要的是在变量文本文件中追加新的字符串实例到HashSet,以创建所述字典。
任何帮助都将不胜感激。
try {
Scanner textFile = new Scanner(new File("Test2.txt"));
Set<String> dictionary = new HashSet<String>();
while (textFile.hasNext()) {
dictionary.add(textFile.next().trim());
}
textFile.close();
for (String str : dictionary) {
System.out.print(str + " ");
}
} catch(FileNotFoundException e){
e.printStackTrace();
}
答案 0 :(得分:1)
这是因为您正在重新创建hashset:
Set<String> dictionary = new HashSet<String>();
每次阅读新文件。
如果要保留更改,可以在更高的范围内声明该设置,或者使其成为创建对象时创建的对象中的属性,并且只是随后读取文件。
以下是示例代码:
public class DictClass {
private Set<String> dictionary = new HashSet<String>();
//... cunstructors, getters, setters
void readFile(String fileName) {
try {
Scanner textFile = new Scanner(new File(fileName));
while (textFile.hasNext()) {
// now dictionary is not recreated each time
dictionary.add(textFile.next().trim());
}
textFile.close();
for (String str : dictionary) {
System.out.print(str + " ");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
答案 1 :(得分:0)
上课
public class TextFileReader {
private Set<String> dictionary;
public TextFileReader(Set<String> dictionary) {
this.dictionary = dictionary;
}
public void printDict(Set<String> dictionary) {
for (String dictionary1 : dictionary) {
System.out.println(dictionary1);
}
}
public void fileScanner(String textFileName) {
try {
Scanner textFile = new Scanner(new File(textFileName));
while (textFile.hasNext()) {
dictionary.add(textFile.next().trim());
}
textFile.close();
for (String str : dictionary) {
System.out.print(str + " ");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
测试
public class Test {
static void main(String[] args){
Set<String> dict = new HashSet<String>();
TextFileReader reader = new TextFileReader(dict);
List<String> textFileList = Arrays.asList("textFile1", "textFile2");
for (String textFileList1 : textFileList) {
reader.fileScanner(textFileList1);
}
reader.printDict(dict);
}
}
运行
$ javac Test.java
$ java Test