Создайте список массивов строк из другого списка массивов строк путем разделения строк

#java #android #string #arraylist #split

#java #Android #строка #список массивов #разделение

Вопрос:

Мне нужно создать список массивов строк из другого списка массивов строк, разделив строки из первой во вторую. Данные поступают из файла .txt, считываемого BufferedReader. Предполагается, что это приложение отображает счетчик, из которого пользователь может выбрать имя учащегося, затем вычислить его оценку и отобразить ее. Самое большое препятствие сейчас заключается в том, что я получаю исключение нулевого указателя при попытке использовать .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. line.split("\s "); возвращает a String[] , вы должны что-то с этим делать?

2. while (item != null) … это бесконечный цикл

Ответ №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 = new Spinner(this); , но этот счетчик не исходит из вашего XML-макета … возможно, вам следует использовать findViewById для получения счетчика, который

Комментарии:

1. Спасибо! По крайней мере, теперь у меня есть направление!