Java 显示带有树集的嵌套哈希映射,以显示特定文件中单词的索引
我想显示(JSON格式)文件中包含的单词列表,第一个键是单词,第二个键是它来自的文件,值是在文件中找到单词时的索引。唯一的问题是新树集似乎有问题,因为我所有的单词都有相同的哈希图。它们都有相同的嵌套HashMap,但我希望它们中的每一个都是独立的。我希望能得到一些帮助。 这是我的密码:Java 显示带有树集的嵌套哈希映射,以显示特定文件中单词的索引,java,file,indexing,hashmap,word,Java,File,Indexing,Hashmap,Word,我想显示(JSON格式)文件中包含的单词列表,第一个键是单词,第二个键是它来自的文件,值是在文件中找到单词时的索引。唯一的问题是新树集似乎有问题,因为我所有的单词都有相同的哈希图。它们都有相同的嵌套HashMap,但我希望它们中的每一个都是独立的。我希望能得到一些帮助。 这是我的密码: public static HashMap<String, HashMap<String, TreeSet<Integer>>> listStems(Path inputFil
public static HashMap<String, HashMap<String, TreeSet<Integer>>> listStems(Path inputFile) throws
IOException {
HashMap<String, HashMap<String, TreeSet<Integer>>> finalString = new HashMap<String,
HashMap<String, TreeSet<Integer>>>();
HashMap<String, TreeSet<Integer>> mapString = new HashMap<String, TreeSet<Integer>>();
int counter=0;
Stemmer stemmer = new SnowballStemmer(DEFAULT);
try (BufferedReader br =
new BufferedReader(new InputStreamReader(
new FileInputStream(inputFile.toString()), "UTF-8"));) {
String line;
while((line = br.readLine()) != null) {
String[] toStemArray = parse(line);
for(int i = 0;i<toStemArray.length;i++) {
counter++;
if(!finalString.containsKey(toStemArray[i])) {
mapString.put(inputFile.toString(), new TreeSet<Integer>());
finalString.put(toStemArray[i], mapString);
finalString.get(toStemArray[i]).get(inputFile.toString()).add(counter);
}
else if(finalString.containsKey(toStemArray[i])) {
finalString.get(toStemArray[i]).get(inputFile.toString()).add(counter);
}
}
}
}
return finalString;
}
publicstatichashmap listStems(路径inputFile)抛出
IOException{
HashMap finalString=新的HashMap();
HashMap mapString=新HashMap();
int计数器=0;
Stemmer Stemmer=新的雪球式Stemmer(默认值);
try(BufferedReader br)=
新的BufferedReader(新的InputStreamReader(
新文件InputStream(inputFile.toString(),“UTF-8”);){
弦线;
而((line=br.readLine())!=null){
字符串[]toStemArray=parse(行);
对于(int i=0;i所有HashMap
实例都是相同的,因为您只在方法的开头创建一个实例(mapString
),然后重新使用它
在你的内部if
语句中,你检查你以前是否见过这个词,如果没有,你可以在一个HashMap
中添加一个条目,将文件名映射到一个新的、空的TreeSet
。这几乎是正确的模式——你正在检测一个新词并创建一个新的TreeSet
,但没有创建一个新的g一个新的HashMap
如果希望每个单词都有一个HashMap
,则每次看到一个新词时都需要创建一个新的HashMap,而不是一次。移动newhashmap()
到紧靠映射字符串的前面。将行放入,它几乎可以正常工作:每个单词将有一个HashMap
,但现在只创建一个树集
用同样的方法修复这个问题(如果您以前没有看到该单词的文件,则创建一个新的TreeSet
)你应该很好!工作得很好!谢谢你,所以muchI尝试实现了第二部分,它负责处理如果单词来自的文件不是初始映射的一部分,并且在我的输出文件中,每个映射只有一个文件,它始终是最后一个用作输入的文件。有什么办法改变吗?我有点迷路了