我的代码:
public ArrayList<People_Attendance> attendance_reader() {
ArrayList<People_Attendance> attendance_list = new ArrayList<People_Attendance>();
String file_string = "";
try {
InputStream filestream = openFileInput("Attendance_File");
if (filestream != null) {
InputStreamReader inputStreamReader = new InputStreamReader(filestream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString;
StringBuilder stringBuilder = new StringBuilder();
while ( (receiveString = bufferedReader.readLine()) != null ) {
stringBuilder.append(receiveString);
}
file_string = stringBuilder.toString();
String parse_array[] = file_string.split(";");///splits into individual People_Attendance items.
String item_name; String item_number; String item_status; ///declares all the item strings
for(String person_item : parse_array) {
String item_parse_array[] = person_item.split(",");
item_name = item_parse_array[0];
item_number = item_parse_array[1];
item_status = item_parse_array[2];
attendance_list.add(new People_Attendance(item_name, item_number, item_status));
///above is an example of an initialization method, custom inside of People_Attendance class.
}
}
在这一行:
People_Attendance item = new People_Attendance(item_name, item_number, item_status);
这种初始化是怎么回事?它给出了一个NullPointerException,所以我的一个字符串可能是null? 我已经调试过,发现错误就在这里。我还发现我的读者读得正确,因为我插入了调试行,并从中获取了文本。我倾向于认为我在使用String.Split()做错了 经过更多调试后,我发现分裂后得到两个字符串 - 名称和状态,但由于某种原因没有数字......非常困惑。我的调试技术:
Log.d("DEBUG", person_item);
String item_name = item_parse_array[0];
Log.d("DEBUG", item_name);
String item_number = item_parse_array[1];
Log.d("DEBUG", item_number);
String item_status = item_parse_array[2];
Log.d("DEBUG", item_status);
因此我肯定会得到这个号码吗?
答案 0 :(得分:1)
我尝试了您发布的代码并且工作正常。只有它可能出错的地方是从文件中读取。请在file_string = stringBuilder.toString();
行添加一个断点,并检查您是否获得了正确的价值。
class SplitFunction{
public static void main(String args[]) throws Exception{
String file_string = "";
file_string = "Dan Stedman,07895 678909,INVITED;Dan Stedman,07895 678909,INVITED;Dan Stedman,07895 678909,INVITED;";
String parse_array[] = file_string.split(";");///splits into individual People_Attendance items.
String item_name; String item_number; String item_status; ///declares all the item strings
for(String person_item : parse_array){
String item_parse_array[] = person_item.split(",");
item_name = item_parse_array[0];
item_number = item_parse_array[1];
item_status = item_parse_array[2];
System.out.println(item_status);
}
}
}
答案 1 :(得分:1)
readLine返回的字符串可能包含一些空格
parse_array中的第4个元素中没有“,”(只是“”),所以person_item.split(“,”);返回一个空数组。
您的行号必须未对齐,因为它应该在item_name = item_parse_array[0]
上崩溃。 (如果[0]和[1]存在但[2]失败,那将是一个超出范围的例外。)
答案 2 :(得分:0)
People_Attendance item = new People_Attendance(item_name, item_number, item_status);
这种初始化是怎么回事?它给出了一个NullPointerException,因此可能我的一个字符串是null ??
仅当People_Attendance
consructor NPE。
如果注释足够正确,构造函数看起来像这样
People_Attendance(String name, String number, String status) {
this.people_details.name = name;
this.people_details.number = number;
this.attendance_status = status;
}
如果people_details
为null
,则仅限NPE。与字符串拆分或null String
引用无关,只是在使用前初始化成员变量。