我遇到了一个问题,我似乎无法解决。分割时,我应该能够通过设置 row [0],row [1],row [2] 来获取 id,name,check 。奇怪的是,只有row [0](id)似乎有效。 名称,检查给我一个错误。有人可以帮助我吗?
数据示例:
id,name,check
1,john,0
1,patrick,0
1,naruto,0
代码:
ArrayList<String> names = new ArrayList<String>();
try {
DataInputStream dis = new DataInputStream(openFileInput(listLocation(listLoc)));
BufferedReader br = new BufferedReader(new InputStreamReader(dis));
String line;
while ((line = br.readLine()) != null) {
String[] row = line.split(Pattern.quote(","));
//names.add(row[0]); // id
names.add(row[1]); // name // ERROR AT THIS LINE
//names.add(row[2]); // check
}
br.close();
}
catch (IOException e) {
e.printStackTrace();
}
错误讯息:
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
解决 似乎我在文件末尾有一个不正确的值(问号)。删除此行时。我的代码工作(没有Patter.quote)。谢谢大家的快速回复。第一个答案帮助我提醒我使用Log值,我可以看到&#39;不正确的值&#39;。我的坏。
答案 0 :(得分:1)
可能在时间:
String[] row = line.split(",");
被调用,您尝试阅读的文件/流的行中没有逗号(,)。
答案 1 :(得分:0)
试试这段代码,
ArrayList<String> names = new ArrayList<String>();
try {
DataInputStream dis = new DataInputStream(openFileInput(listLocation(listLoc)));
BufferedReader br = new BufferedReader(new InputStreamReader(dis));
String line;
while ((line = br.readLine()) != null) {
String[] row = line.split(",");
//names.add(row[0]); // id
names.add(row[1]); // name // ERROR AT THIS LINE
//names.add(row[2]); // check
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
我认为您不需要在这里使用Pattern.quote(",")
。
答案 2 :(得分:0)
根据我对txt文件的经验,这是处理它的最佳方法:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.regex.Pattern;
public class Cyto {
public static void main(String[] args) throws IOException {
ArrayList<String> names = new ArrayList<String>();
try {
FileInputStream dis = new FileInputStream("list.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(dis));
String line;
while (br.ready()) {
line = br.readLine();
String[] row = line.split(Pattern.quote(","));
System.out.println(row[1]);
names.add(row[1]);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用
br.ready()
而不是直接从流中读取。