在循环中保存值

时间:2014-02-03 15:43:03

标签: java split while-loop

我正在尝试读取我的国家/地区数组字符串的值,该字符串读取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变量中存储值。但是当我的循环结束时,我只在循环中读取了最后一个值。如何存储所有值,以便在完成循环后打印它们?

5 个答案:

答案 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]

创建它