Android/Java将文本文件中的名称存储在字符串数组中,将整数存储在int数组中

Android/Java将文本文件中的名称存储在字符串数组中,将整数存储在int数组中,java,android,arrays,android-studio,inputstream,Java,Android,Arrays,Android Studio,Inputstream,我正在android studio中编写java代码,我试图从文本文件中提取名称并将其存储在字符串数组中,以及整数(测试分数)并将其存储在整数数组中。由于老师的限制,我无法更改文本文件。文本文件位于“资源”文件夹中。关于我如何做到这一点的任何想法,我都搜索过,也能找到类似的问题,但似乎没有适用于我的情况。谢谢 文本文件内容包括: Name Test1 Test2 Test3 Final Adam Anderson 81 90 85 87 Ben

我正在android studio中编写java代码,我试图从文本文件中提取名称并将其存储在字符串数组中,以及整数(测试分数)并将其存储在整数数组中。由于老师的限制,我无法更改文本文件。文本文件位于“资源”文件夹中。关于我如何做到这一点的任何想法,我都搜索过,也能找到类似的问题,但似乎没有适用于我的情况。谢谢

文本文件内容包括:

Name            Test1   Test2   Test3   Final
Adam    Anderson    81  90  85  87
Ben Brown       77  80  68  94
Chris   Cross       74  80  56  62
Don Dare        86  94  90  89
Eric    Earl        96  93  90  98
Fred    Foley       79  92  59  86
Gina    Gray        80  83  95  87
Holly   Hank        74  77  75  78
Ian Ingram      66  64  56  60
Jill    Johnson     90  98  78  89  
我目前的代码是:

import android.app.AlertDialog;
import android.content.res.AssetManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class App1Act1 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_app1_act1);
        int[] testScores;
        String[] studentNames;


        //error message
        AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);

        AssetManager am = getAssets();

        try {
            InputStream inputT = am.open("grades.txt");

            for(i=0; i<11; i++){
                studentNames[i] = //???
            }

        }

        catch(FileNotFoundException e) {

            dlgAlert.setMessage("File was not found, please import file and try again.");
            dlgAlert.setTitle("Error Message...");
            dlgAlert.setPositiveButton("OK", null);
            dlgAlert.setCancelable(true);
            dlgAlert.create().show();
        }

        catch(IOException e){
            dlgAlert.setMessage("Oops!  Something happened!"); //in the tradition of windows 10
            dlgAlert.setTitle("Error Message...");
            dlgAlert.setPositiveButton("OK", null);
            dlgAlert.setCancelable(true);
            dlgAlert.create().show();
        }

        finally {

        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_app1_act1, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
导入android.app.AlertDialog;
导入android.content.res.AssetManager;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.io.InputStream;
公共类App1Act1扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u app1\u act1);
int[]测试分数;
字符串[]studentNames;
//错误消息
AlertDialog.Builder dlgAlert=新建AlertDialog.Builder(此);
AssetManager am=getAssets();
试一试{
InputStream input=am.open(“grades.txt”);
对于(i=0;i首先:

  • 确保正确打开文件
  • 避免在第一行上进行任何处理,因此这只是一个标题行
  • 用于按空格分隔行。因此,现在调用hasMoreTokens()的第一个字符串将是名字,第二个调用将是姓氏,下一个调用将为您提供数值
  • 使用Integer.parseInt()方法将字符串转换为int

当然,这只是一种方法,我相信你可以做得比我的建议好得多。

从文件中读取数据后,你需要对数据做什么?将来自多个学生的不同测试的分数存储在一维数组中(
int[]testScores
)使检索分数(例如按学生姓名)变得困难。是否强制将此数据存储在单独的数组中?否则,我将考虑创建一个模型类,其中包含每个标题的字段,并且每行都是一条记录(例如,一个名为
Student
的类,其中包含一个名称字段和一些分数字段。由于数据在逻辑上分组在一起,因此检索数据变得更加容易。@Mick助记符,在我存储完数据后,我将(理想情况下)继续)将每个名称存储在微调器中,然后根据微调器中选择的名称获得该学生考试分数的平均值。我不必将数据存储在单独的数组中,这正是我当时采用的方法。