【问题标题】:Create a string arraylist from another string arraylist by splitting strings通过拆分字符串从另一个字符串数组列表创建一个字符串数组列表
【发布时间】:2017-02-13 08:49:56
【问题描述】:

我需要通过将字符串从第一个字符串拆分到第二个字符串来从另一个字符串数组列表创建一个字符串数组列表。数据来自 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();

}}

【问题讨论】:

  • line.split("\\s+"); 返回一个String[],你应该做些什么吗?
  • while (item != null) ...这是一个无限循环

标签: java android string arraylist split


【解决方案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&lt;Student&gt;

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

然后您需要一个ArrayAdapter&lt;Student&gt;,您可以自定义它以仅显示学生的姓名。

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

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


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

【讨论】:

  • 谢谢!至少我现在有了方向!
猜你喜欢
  • 2021-06-27
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 2021-08-09
  • 2019-03-21
  • 2019-07-07
  • 1970-01-01
相关资源
最近更新 更多