Java 将文本文件中的名称和数字分开
我要做的是读取一个如下所示的文本文件:Java 将文本文件中的名称和数字分开,java,arrays,class,arraylist,text,Java,Arrays,Class,Arraylist,Text,我要做的是读取一个如下所示的文本文件: Tom 96 95 94 93 54 Scanner nameInput = new Scanner(System.in); System.out.print("What is your name? "); String name = nameInput.next(); Student student = new Student(name); student.addQuiz(96); student.addQ
Tom 96 95 94 93 54
Scanner nameInput = new Scanner(System.in);
System.out.print("What is your name? ");
String name = nameInput.next();
Student student = new Student(name);
student.addQuiz(96);
student.addQuiz(94);
student.addQuiz(93);
student.addQuiz(92);
System.out.println("Students Name: " + student.getName());
System.out.println("Total Quiz Scores: " + student.getTotalScore());
System.out.println("Average Quiz Score: " + student.getAverageScore());
把名字和号码分开。然后我将打印学生的姓名总分(所有数字的总和)和平均分。我有一个名为Student的单独班级,负责以下课程:
private String name;
private int numOfQuizzesTaken;
private int totalScore;
public Student(String name){
this.name = name;
}
public String getName() {
return name;
}
public int getTotalScore() {
return totalScore;
}
public void addQuiz(int score) {
totalScore = totalScore + score;
numOfQuizzesTaken++;
}
public double getAverageScore(){
return totalScore/(double)numOfQuizzesTaken;
}
}
我知道我需要使用一个数组,但我不知道如何将名称与数字分开,并存储要使用的数字。
我在没有txt文件的情况下编写了类似的代码,代码如下:
Tom 96 95 94 93 54
Scanner nameInput = new Scanner(System.in);
System.out.print("What is your name? ");
String name = nameInput.next();
Student student = new Student(name);
student.addQuiz(96);
student.addQuiz(94);
student.addQuiz(93);
student.addQuiz(92);
System.out.println("Students Name: " + student.getName());
System.out.println("Total Quiz Scores: " + student.getTotalScore());
System.out.println("Average Quiz Score: " + student.getAverageScore());
希望这能让我了解我正在努力做什么,并希望能得到任何帮助 我认为应该使用正则表达式将数字与名称分开。提取包含数字的字符串后,可以将其按空格分割(这将返回一个数字数组),并创建一个用于存储数据的哈希映射(仅当您有唯一的名称时),键是名称,测验分数数组是值。希望这有帮助。:) 在将数字存储到哈希映射之前,可以将其解析为整数或浮点。如果名称只有字母,则此正则表达式应执行以下操作:
([A-Z,A-Z])*\x20*(\d*)
- 组1将与名称匹配李>
- 第2组将为您提供包含数字的字符串,让我们将其存储在
中 String[]stringScores=quizCoreString.split(“\s+”)string quizScoreString
“
字符拆分字符串。数组中的第一个元素是学生的名字,其余元素是分数。下面是一个例子:
String s = fileReader.nextLine();
String[] split = s.split(" ");
Student student = new Student(split[0]);
Arrays.stream(split).skip(1) // skip the first element as it's a name
.forEach(score -> student.addQuiz(Integer.parseInt(score)));
您可以使用“”解析输入,将其存储在字符串或对象数组中,如下所示,如下所示: “汤姆96 95 94 93 54” 表示您从用户处读取的输入,它应该是一个变量,我假设您正在一次性读取学生信息(姓名等)
String[] studentInfoArray = "Tom 96 95 94 93 54".split(" ");
String name = studentInfoArray[0];
Integer quiz1 = Integer.parseInt(studentInfoArray[1]);
您需要将文件读入字符串,然后用“”将其拆分。从那里你将有第一个索引是name,其他索引是分数
File score = new File("quiz.txt");
Scanner scn = new Scanner(new FileInputStream(score));
String buffer = "";
while (scn.hasNext()) {
buffer += scn.nextLine() + "\n";
}
String[] content = buffer.trim().split(" ");
String name = content[0] ;
Student student = new Student(name);
for (int a = 1 ; a < content.length; a++) {
int scoreval = Integer.parseInt(content[a]);
student.addQuiz(scoreval);
}
File score=新文件(“quick.txt”);
Scanner scn=新扫描仪(新文件输入流(score));
字符串缓冲区=”;
while(scn.hasNext()){
buffer+=scn.nextLine()+“\n”;
}
String[]content=buffer.trim().split(“”);
字符串名称=内容[0];
学生=新学生(姓名);
for(int a=1;a
如果您的文本文件保持您提到的格式,您只需逐行读取并按“”分隔,那么您就拥有了包含名称和分数的字符串数组。您必须将文件读取为字符串,以“”分隔,并用eInteger.toInt(“95”)解析数字
格式应相同,但数字数量和名称长度的差异可能会改变。但从您所说的内容来看,这可能不会影响@aussieI在以下位置不断收到错误:.forEach(分数->student.addquick(Integer.parseInt(分数)));法规遵从性错误您正在使用的JDK版本是什么?8我相信我正在使用eclipse。因此,我对第一行分数有一个问题。txt文件称为TextFile。如何更改分数以使用该txt文件?我非常喜欢这个,这就是我需要的分数是txt文件文件分数=新文件(“quick.txt”)
虽然quick.txt是文本文件的相对位置,但我已经修复了它,但它仍然找不到该文件。我是否将文本文件放在了错误的位置?您肯定将其放在了错误的位置。首先检查电脑上该文件的绝对路径,然后使用文件分数=新文件(“绝对/path/to/quick.txt”);
表达式如果有效,则可以开始处理相对路径。在我的示例中,我假设文本文件位于项目目录中。它只是一个代码示例,您可以使用for循环读取其余数组元素。