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}