java - 通过分割字符串从另一个字符串数组列表创建一个字符串数组列表

标签 java android string arraylist split

我需要通过将字符串从第一个字符串拆分到第二个字符串来从另一个字符串数组列表创建一个字符串数组列表。数据来自 BufferedReader 读取的 .txt 文件。该应用程序应该显示一个旋转器,用户可以从中选择学生的姓名,然后计算他们的成绩并显示该成绩。现在最大的障碍是当我尝试使用 .split 时出现空指针异常。正如您可能知道的那样,我对此相当陌生,需要一些帮助。谢谢!

成绩.txt

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      

java代码

    public class MainActivity extends AppCompatActivity {

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

    String strName, strLastName, strFirstName, strFinalGrade;

    int intTest1, intTest2, intTest3, intFinal, intFinalGrade;

    int intPointsPossible = 400;

    int finalGrades[] = new int[0];

    AssetManager am = getAssets();
    ArrayList<String> list = new ArrayList<String>();
    ArrayList<String> finalList = finalList = new ArrayList<String>();
            BufferedReader reader;
    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);

        }
        while (item != null){
            for (int i = 0; i < list.size(); i++){
                line.split("\\s+");
                finalList.add(item);
            }
        }

        input.close();

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




    Spinner spinner = new Spinner(this);

    ArrayAdapter<String> dataAdapter =
            new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);

    spinner.setAdapter(dataAdapter);

    dataAdapter.notifyDataSetChanged();

}}

最佳答案

The biggest hurdle right now is that I get a null pointer exception when I try to use .split

您正在运行while (line != null){

这意味着为了让这个循环停止,line将是null

假设这是一个拼写错误......

ArrayList<String> finalList = finalList = new ArrayList<String>();

无论如何,你可以Arrays.asList(line.split("\\s+")获取列表,您可以 addAll进入finalList

BufferedReader reader;

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

    while ((line = reader.readLine()) != null) {
        String[] parts = line.split("\\s+");
        finalList.addAll(Arrays.asList(parts));
    }

    input.close();
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (reader != null) reader.close();
}

不过,实际上,我认为这不是您想要的。因为

This app is supposed to display a spinner from which the user can choose a student's name then calculate their grade and display that as well

每一行都应该解析为 Student对象,可能,然后finalList可以是List<Student>

public class Student {
    String firstName, lastName;
    int test1, test2, test3, final; // or List<Integer> tests;
}

那么你需要一个ArrayAdapter<Student>您可以自定义以仅显示学生的姓名。

接下来,您需要 Spinner 上的项目选择监听器来计算并显示 Activity 的成绩。

不过,这些是单独的问题,您应该针对这些问题发布新问题。

<小时/>

然后,你有Spinner spinner = new Spinner(this); ,但是这个 Spinner 不是来自您的 XML 布局...也许您应该使用 findViewById获得 Spinner

关于java - 通过分割字符串从另一个字符串数组列表创建一个字符串数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39864978/

相关文章:

java - 如何在java中测试sql查询是否返回true

java - Java 类与 Maven 的隐式依赖关系?

android - Realm Android 解析问题

android - 如何使用 Enthought Canopy 编写安卓应用

c - 如何随机替换字符串中的一个字符?

java - 如何使数据库连接类成为单例?

java - 使用Tika 1.10 Parser获取文件内容

java - 尝试创建 Toast.makeText 时出错

javascript - 将新行转换为段落/br HTML 标记,这可以是单个正则表达式吗?

python - 如何将列表元素转为字符串?