通过拆分字符串从另一个字符串arraylist创建一个字符串arraylist

时间:2016-10-05 03:32:31

标签: java android string arraylist split

我需要通过将字符串从第一个字符串拆分为第二个字符串来从另一个String ArrayList创建一个String ArrayList。数据来自BufferedReader读取的.txt文件。这个应用程序应该显示一个微调器,用户可以从中选择学生的名字,然后计算他们的成绩并显示它。现在最大的障碍是当我尝试使用.split时,我得到一个空指针异常。你可能会说,我对此很新,可以使用一些帮助。谢谢!

grades.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();

}}

1 个答案:

答案 0 :(得分:1)

  

现在最大的障碍是当我尝试使用.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();
}

虽然,实际上,我认为这不是你想要的。因为

  

这个应用程序应该显示一个微调器,用户可以从中选择一个学生的名字然后计算他们的成绩并显示它

可能会将每一行解析为Student个对象,然后finalList可以List<Student>

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

然后您需要ArrayAdapter<Student>,您可以自定义以仅显示学生的姓名。

接下来,您需要Spinner上的项目选择侦听器来计算和显示活动的成绩。

这些是您应该发布新问题的单独问题。

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