Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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_Arrays_Class_Arraylist_Text - Fatal编程技术网

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 quizScoreString

    String[]stringScores=quizCoreString.split(“\s+”)


如果文本文件采用以下格式,则可以读取整行,然后按
字符拆分字符串。数组中的第一个元素是学生的名字,其余元素是分数。下面是一个例子:

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
如果您的文本文件保持您提到的格式,您只需逐行读取并按“”分隔,那么您就拥有了包含名称和分数的字符串数组。您必须将文件读取为字符串,以“”分隔,并用e
Integer.toInt(“95”)解析数字
格式应相同,但数字数量和名称长度的差异可能会改变。但从您所说的内容来看,这可能不会影响@aussieI在以下位置不断收到错误:.forEach(分数->student.addquick(Integer.parseInt(分数)));法规遵从性错误您正在使用的JDK版本是什么?8我相信我正在使用eclipse。因此,我对第一行分数有一个问题。txt文件称为TextFile。如何更改分数以使用该txt文件?我非常喜欢这个,这就是我需要的
分数
是txt文件
文件分数=新文件(“quick.txt”)
虽然quick.txt是文本文件的相对位置,但我已经修复了它,但它仍然找不到该文件。我是否将文本文件放在了错误的位置?您肯定将其放在了错误的位置。首先检查电脑上该文件的绝对路径,然后使用
文件分数=新文件(“绝对/path/to/quick.txt”);
表达式如果有效,则可以开始处理相对路径。在我的示例中,我假设文本文件位于项目目录中。它只是一个代码示例,您可以使用for循环读取其余数组元素。