将名称与文本文件中的数字分开

时间:2018-05-08 16:05:50

标签: java arrays class arraylist text

我要做的是阅读一个如下所示的文本文件:

{"api":{"v1":{"assets":"/api/v1/assets/","docs":"https://docs.bigchaindb.com/projects/server/en/v1.3.0/http-client-server-api.html","outputs":"/api/v1/outputs/","statuses":"/api/v1/statuses/","streams":"ws://localhost:9985/api/v1/streams/valid_transactions","transactions":"/api/v1/transactions/"}},"docs":"https://docs.bigchaindb.com/projects/server/en/v1.3.0/","keyring":[],"public_key":"5USUyXwDGPh7yWiHqihRB6ebX2zw5AxydFc7DsTPUr6m","software":"BigchainDB","version":"1.3.0"}

并分隔姓名和号码。然后,我将打印学生的姓名总分(所有数字的总和)和平均值。我有一个名为Student的单独类,它包含类:

Tom 96 95 94 93 54

我知道我需要使用数组,但我不知道如何从数字中分隔名称并存储要使用的数字。 我写了一个没有txt文件的类似代码,它看起来像这样:

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;
   }
}

希望这能让我理解我想要做的事情,并希望得到任何帮助。

4 个答案:

答案 0 :(得分:0)

我认为您应该使用正则表达式将数字与名称分开。一旦提取了包含数字的字符串,就可以用空格(它将返回一个数字数组)将其拆分,并创建一个用于存储数据的哈希映射(仅当您有唯一的名称时),key是名称和数组测验得分是价值。希望这可以帮助。 :)

您可以在将数字存储到哈希映射之前将其解析为整数或浮点数。如果名称只有字母表,则此正则表达式应该执行:([A-Z,a-z])*\x20*(\d.*)

  • 第1组将匹配该名称。
  • 第2组将为您提供包含数字的字符串,然后将其存储在String quizScoreString中。

    String [] stringScores = quizScoreString.split(" \ s +");

答案 1 :(得分:0)

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

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)));

答案 2 :(得分:0)

您可以使用“”解析输入,将其存储在String或Object数组中,如下所示,

  

“Tom 96 95 94 93 54”

表示您从用户读取的输入,它应该是一个变量,我假设您正在一次性阅读学生信息(姓名等)

    String[] studentInfoArray = "Tom 96 95 94 93 54".split(" ");
    String name = studentInfoArray[0];
    Integer quiz1 = Integer.parseInt(studentInfoArray[1]);

答案 3 :(得分:0)

您需要将文件读入字符串,然后将其拆分为" &#34 ;.从那里你将有第一个索引为名称,其他索引为分数

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);
}