我正在尝试读取我的国家/地区数组字符串的值,该字符串读取csv文件。
InputStreamReader reader = new InputStreamReader(asset_stream);
br = new BufferedReader(reader);
String[] country = null;
String cvsSplitBy = ";";
try {
while ((line = br.readLine()) != null) {
country = line.split(cvsSplitBy);
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
我的代码目前正在country
变量中存储值。但是当我的循环结束时,我只在循环中读取了最后一个值。如何存储所有值,以便在完成循环后打印它们?
答案 0 :(得分:7)
考虑使用列表来保存值:
List<String[]> countries = new ArrayList<>();
try {
while ((line = br.readLine()) != null) {
countries.add(line.split(cvsSplitBy));
}
}
稍后您可以遍历此列表:
for (String[] country : countries) {
System.out.println(Arrays.toString(country); // or whatever
}
答案 1 :(得分:4)
假设您每行阅读多个国家/地区,您可以使用类似的内容 -
public static List<String> getCountryList(InputStream asset_stream) {
InputStreamReader reader = new InputStreamReader(asset_stream);
BufferedReader br = new BufferedReader(reader);
String[] country = null;
List<String> al = new ArrayList<String>();
try {
String line;
while ((line = br.readLine()) != null) {
country = line.split(cvsSplitBy);
for (String s : country) {
al.add(s);
}
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
br.close();
}
return al;
}
答案 2 :(得分:3)
对于每个循环,您将分割当前行并将其部分保存在country
数组中。因此,您只能在while循环后看到最后一行的结果。
如果要存储每行的拆分结果,则应使用String []的集合。例如:
LinkedList<String[]> list = new LinkedList<String[]>();
while ((line = br.readLine()) != null) {
list.add(line.split(cvsSplitBy));
}
//To read values
for (String[] entry : list) {
//do something with entry
}
答案 3 :(得分:3)
您可以将它们存储在其中一种集合类型中。 (见http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html)
Java集合为您提供各种数据结构,以按特定顺序存储和检索数据。例如,List将允许您通过索引检索数据并保留插入顺序(FIFO)。其他数据结构(如树,队列,堆栈,集)具有其他属性。
在代码中使用List:
InputStreamReader reader = new InputStreamReader(asset_stream); br = new BufferedReader(reader); List <String[]> countries=new LinkedList <String[]>(); try { while ((line = br.readLine()) != null) { countries.add(line.split(cvsSplitBy)); } } catch (NumberFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } for(String[] country: countries) { //Do something useful with your List System.Out.println(country[0]); }
答案 4 :(得分:1)
split
返回一个String数组,您将其分配给数组country
。您应该将split
的结果分配到country
中的某个位置,即country[i]
。如果您不使用List
而不是数组,则必须首先确定数组的大小!即使用给定大小new String[size]