我要做的是阅读一个如下所示的文本文件:
{"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;
}
}
希望这能让我理解我想要做的事情,并希望得到任何帮助。
答案 0 :(得分:0)
我认为您应该使用正则表达式将数字与名称分开。一旦提取了包含数字的字符串,就可以用空格(它将返回一个数字数组)将其拆分,并创建一个用于存储数据的哈希映射(仅当您有唯一的名称时),key是名称和数组测验得分是价值。希望这可以帮助。 :)
您可以在将数字存储到哈希映射之前将其解析为整数或浮点数。如果名称只有字母表,则此正则表达式应该执行:([A-Z,a-z])*\x20*(\d.*)
第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);
}