Java 将文本文件数据放入哈希映射

Java 将文本文件数据放入哈希映射,java,java-io,Java,Java Io,我在文本文件中的数据如下所示 3 movie title 4 movie title 1 movie title 上面的数字是电影分级,下面的文字是电影标题 到目前为止,我的代码如下。但除了空括号外,它不会打印任何内容!样本代码将不胜感激 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.

我在文本文件中的数据如下所示

3
movie title
4
movie title
1
movie title
上面的数字是电影分级,下面的文字是电影标题

到目前为止,我的代码如下。但除了空括号外,它不会打印任何内容!样本代码将不胜感激

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class MovieReview {

    public static void main(String[] args) {
            Map<Integer, String> map = new HashMap<Integer, String>();
            BufferedReader br = new BufferedReader(new FileReader("C:/Users/sgoetz/Desktop/movieReviews.txt"));
            String line = br.readLine();
            while (line != null) {
                line = br.readLine();
                System.out.println(map);
            }
        }
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;
公共级电影评论{
公共静态void main(字符串[]args){
Map Map=newhashmap();
BufferedReader br=新的BufferedReader(新的文件阅读器(“C:/Users/sgoetz/Desktop/movieReviews.txt”);
String line=br.readLine();
while(行!=null){
line=br.readLine();
系统输出打印项次(map);
}
}
试试这个

public static void main(String[] args) throws IOException {
            Map<Integer, String> map = new HashMap<Integer, String>();
            BufferedReader br = new BufferedReader(new FileReader("movieReviews.txt"));
            String line="";
            int i=0;
            while (line != null) {
                line = br.readLine();
                map.put(i,line);
                i++;
            }
            for(int j=0;j<map.size();j++){
                System.out.println(map.get(j));
            }
        }
publicstaticvoidmain(字符串[]args)引发IOException{
Map Map=newhashmap();
BufferedReader br=新的BufferedReader(新文件阅读器(“movieReviews.txt”);
字符串行=”;
int i=0;
while(行!=null){
line=br.readLine();
图.放(一、线);
i++;
}

对于(int j=0;j您的代码没有打印任何内容,因为您打印的是没有放置任何内容的映射。因此映射仍然为空。此外,您的第一次while迭代有问题,您在while循环之前从流中读取了一行内容,然后输入它并立即读取下一行内容。第一行内容丢失

对于从缓冲流读取,应考虑以下模式:

while(null != (line = br.readLine())) {
    // do what ever you want with the line.
}

如果要根据其分级存储的移动名称,则必须将map声明为map>。以下代码根据其分级填充电影标题。希望这有帮助

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.List;

public class MovieReview {

    public static void main(String[] args) {
            Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();
            BufferedReader br = new BufferedReader(new FileReader("C:/Users/sgoetz/Desktop/movieReviews.txt"));
            String line = null;
            while ((line = br.readLine()) != null) {
                //Rating
                int rating = Integer.parseInt(line);

                //Movie name
                line = br.readLine();

                List<String> movieList = map.get(rating);

                if(movieList == null) {
                    movieList = new ArrayList<String>();
                    map.put(rating, movieList);
                }

                //Adding movie name to list
                movieList.add(line);
            }
        }
    }
}
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.List;
公共级电影评论{
公共静态void main(字符串[]args){
Map Map=newhashmap();
BufferedReader br=新的BufferedReader(新的文件阅读器(“C:/Users/sgoetz/Desktop/movieReviews.txt”);
字符串行=null;
而((line=br.readLine())!=null){
//评级
int rating=Integer.parseInt(行);
//电影名称
line=br.readLine();
List movieList=map.get(评级);
if(movieList==null){
movieList=newarraylist();
地图放置(评级、电影制作人);
}
//正在将电影名称添加到列表中
movieList.add(行);
}
}
}
}
我们开始吧 文件:

代码:

publicstaticvoidmain(字符串[]args)引发IOException{
Map Map=newhashmap();
BufferedReader br=新的BufferedReader(新文件阅读器(“movieReviews.txt”);
字符串行=”;
int i=0;
while(行!=null){
line=br.readLine();
图.放(一、线);
i++;
}
字符串movieNumber=“”;
字符串movieTitle=“”;
字符串movieRating=“”;
字符串movieOther1=“”;
字符串movieOther2=“”;
对于(int j=0;j1)来说,还有一个例子:

while (true) {
    // Number line
    String value = br.readLine();
    if (value == null || value.trim().isEmpty()) {
        break;
    }
    Integer valueInt = Integer.parseInt(value);

    // Name line
    String title = br.readLine();
    if (title == null || value.trim().isEmpty()) {
        break;
    }

    map.put(valueInt, title);
}
System.out.println(map);
输出为:

{1=movie title, 3=movie title, 4=movie title}

您正在控制台上打印地图,而不是打印行。是否每个电影都应该有不同的评级?为什么您需要
地图
?是否要在某种列表中按评级对电影进行分组?从您对Sarz答案的评论中,您想确定文本文件中所有电影的平均评级,如果是这样,那么您的格式将取决于改进。你是定义自己还是做了预定义?它应该定义电影,接着是它的评级,而不是其他方式。但是它仍然是可行的。请考虑编辑你的问题,包括你想对文本文件中的数据做些什么,否则不容易帮助。@ USSR2020634请把它标记为AC。如果这个答案能解决你的问题,请接受。看到了吗?它把每一行都读作电影名称,包括评级行。地图的评级实际上是连续的数字。它怎么能工作得很好?我怎样才能让它以更整洁的格式输出?比如"电影标题:3篇评论,平均4.3/5?因此一些电影不止一次出现在列表中,因为它们从不同的来源获得了不同的评级。它读取文件中的每一行并将其放入地图中。现在它的@user3320634逻辑如何管理它。他也可以使用逗号分隔字符串来实现此目的,还可以节省空间并保持map大小等于电影大小
while (true) {
    // Number line
    String value = br.readLine();
    if (value == null || value.trim().isEmpty()) {
        break;
    }
    Integer valueInt = Integer.parseInt(value);

    // Name line
    String title = br.readLine();
    if (title == null || value.trim().isEmpty()) {
        break;
    }

    map.put(valueInt, title);
}
System.out.println(map);
{1=movie title, 3=movie title, 4=movie title}