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