当前位置: 首页 > 知识库问答 >
问题:

如何将数组解析为Java中的对象

笪成周
2023-03-14

我有一个作业要创建一个应用程序,当通过微调器选择学生的名字时,该应用程序会显示学生的名字和最终字母等级。我已经用名称设置了微调器,我已经从存储在资产中的文本文件中读取了名称和等级。我使用StringBuilder将该文件中的所有信息拆分为一个字符串数组。我想将这些数据解析成一个名为Student的对象,这样我就可以处理每个学生的成绩,但我不知道如何做到这一点。感谢您的帮助!

文本文件:

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

到目前为止我的代码:

package lauren.ruff.lab4;

import android.content.res.AssetManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.StringBuilder;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

TextView name, grade;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String strName;
    String strLastName;
    String strFirstName;
    String strFinalGrade;
    final String[] strSelected = new String[1];

    final int intTest1;
    int intTest2;
    int intTest3;
    int intFinal;
    int intFinalGrade;
    final int[] intSelection = new int[1];

    int intPointsPossible = 400;

    int finalGrades[] = new int[0];

    AssetManager am = getAssets();
    ArrayList<String> list = new ArrayList<String>();
    BufferedReader reader;
    StringBuilder sb = new StringBuilder();
    String[] tempList = new String[0];
    final ArrayList<Integer> finalList = new ArrayList<>();
    String line = " ";
    String item = " ";

    try {
        InputStream input = am.open("grades.txt");
        reader = new BufferedReader(new InputStreamReader(input));

        while (line != null){
            line = reader.readLine();
            list.add(line);

        }

        input.close();

        list.remove(0);

        for (int i = 0; i < list.size(); i++){
            sb.append(i);
        }

        tempList = sb.toString().split("\\s+");

        for (int j = 0; j < tempList.length; j++){
            finalList.add(j);
        }


    } catch (IOException e) {
        e.printStackTrace();
    }

    final Spinner spinner = (Spinner)findViewById(R.id.spName);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            intSelection[0] = spinner.getSelectedItemPosition();
            strSelected[0] = spinner.getSelectedItem().toString();

            name = (TextView)findViewById(R.id.tvDisplayName);
            name.setText(strSelected[0]);

            grade = (TextView)findViewById(R.id.tvDisplayGrade);

            if (intSelection[0] == 0){
                int t1 = finalList.get(2);
                int t2 = finalList.get(3);
                int t3 = finalList.get(4);
                int t4 = finalList.get(5);
                Grades(t1,t2,t3,t4);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

}


public String Grades(int t1, int t2, int t3, int t4){
    int test1 = 0, test2 = 0, test3 = 0, finalScore = 0;
    double finalGrade;
    String letterGrade;
    finalGrade = (test1 + test2 + test3 + finalScore)/4;
    if (finalGrade > 93){
        letterGrade = "A";
    }
    else if (finalGrade > 88){
        letterGrade = "B+";
    }
    else if (finalGrade > 83){
        letterGrade = "B";
    }
    else if (finalGrade > 78){
        letterGrade = "C+";
    }
    else if (finalGrade > 73){
        letterGrade = "C";
    }
    else if (finalGrade > 65){
        letterGrade = "D";
    }
    else {
        letterGrade = "F";
    }

    return letterGrade;
}


}

共有3个答案

华化
2023-03-14

您可以创建一个POJO(Plain java对象)类。

public class StudentPOJO{

   private String studentName;
   private String grade;


   public void setStudent(String studentName){
       this.studentName=studentName;
   }

   public void setStudentGrade(String grade){
       this.grade=grade;
   }

   public String getStudentGrade(){
       return grade;
   }

   public String getStudentName(){
       return studentName;
   }

}

通过这种方式,您可以为每个学生创建一个对象来存储他/她的信息。

南门祯
2023-03-14

拆分所有数据后,使用好的参数调用一个新Strudent(stringfirstname、stringlastname、int[]tests、int final)

宦琪
2023-03-14

尝试读取txt文件并创建一个对象,而不是添加到列表中。试试这样的。

YourObject obj = new YourObject();
try
{
    List<String> yourLines = Files.readAllLines(java.nio.file.Paths.get("./grades.txt"), StandardCharsets.UTF_8);
    for (String line : yourLines) {
        String[] tokens = line.split(" ");
        obj.setName(tokens[0]);
    }
    System.out.println(obj.toString());
}
catch(IOException e)
{
    e.printStackTrace();
}`
 类似资料:
  • 问题内容: 我正在尝试使用mapper进行解析以将大JSON解析为java对象。我有一个很大的JSON,但遇到了其中的这一小片段,不确定如何解析。 这是JSON,其格式看起来几乎没有什么不同。我试图了解如何将其解析为对象。 我不知道它采用哪种格式,以及如何将其解析为对象。 问题答案: 这取决于你的身材有多大。如果可以将其加载到内存,则可以使用最简单的方法: 解决方案1: POJO类: 用法: 上面

  • 问题内容: 我正在尝试解析如下的JSON 到[[“ Jack”,“ Jones”,“ Rock”,“ Taylor”,“ Rob”],[“ Rose”,“ John”],[“ Ted”]]的数组 这是数组的数组。 我尝试了下面的代码 当我打印“人”时,我得到o / p为 我很困惑当“人物”重复3次时如何解析 尝试在UITableView中显示内容,其中第一个单元格具有“ Jack” ..“ Rob

  • 我试图在大摇大摆地描述以下post参数: “任何人”=[“971”,50.0,70.0],“832”,50.0,30.0],“134A”,50.0,100.0]]

  • 我以前没有使用过JSON数据,因此问题来了。我在文件中有以下JSON对象。 这是我的模型对象。 我的任务是读取JSON对象并返回模型对象列表。 我已经导入了简单的。json系列jar,这是我读取文件的代码。 我的问题是, 如何将JSON文档解析为我的Model对象? 如果输入文件是JSON但格式不同,如何抛出异常/处理异常? 感谢任何帮助。

  • 你好,我有以下任务: 具有JSON对象的URL: *通过注释定义如何将JSON定义到Java列表中,并找到其中有“名称”的对象。 我认为问题是在不使用任何java库的情况下解析JSON。到目前为止,我已经开发了以下代码: 我在这里做的是我有一个JSONObject类,它将JSON属性存储在映射中,然后我想使用反射来填充任何类。 为了解析JSON,我尝试创建一个迷你FSM(:)),它使用For循环解

  • 我试图将以下TSV数据解析为嵌套对象,但我的“标题”字段在嵌套类中始终为空。 我已经在底部包含了将TSV数据转换为对象的方法。