Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 显示带有树集的嵌套哈希映射,以显示特定文件中单词的索引_Java_File_Indexing_Hashmap_Word - Fatal编程技术网

Java 显示带有树集的嵌套哈希映射,以显示特定文件中单词的索引

Java 显示带有树集的嵌套哈希映射,以显示特定文件中单词的索引,java,file,indexing,hashmap,word,Java,File,Indexing,Hashmap,Word,我想显示(JSON格式)文件中包含的单词列表,第一个键是单词,第二个键是它来自的文件,值是在文件中找到单词时的索引。唯一的问题是新树集似乎有问题,因为我所有的单词都有相同的哈希图。它们都有相同的嵌套HashMap,但我希望它们中的每一个都是独立的。我希望能得到一些帮助。 这是我的密码: public static HashMap<String, HashMap<String, TreeSet<Integer>>> listStems(Path inputFil

我想显示(JSON格式)文件中包含的单词列表,第一个键是单词,第二个键是它来自的文件,值是在文件中找到单词时的索引。唯一的问题是新树集似乎有问题,因为我所有的单词都有相同的哈希图。它们都有相同的嵌套HashMap,但我希望它们中的每一个都是独立的。我希望能得到一些帮助。 这是我的密码:

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尝试实现了第二部分,它负责处理如果单词来自的文件不是初始映射的一部分,并且在我的输出文件中,每个映射只有一个文件,它始终是最后一个用作输入的文件。有什么办法改变吗?我有点迷路了