读取文本文件后的空数组

时间:2013-12-06 17:55:21

标签: java arrays file text bufferedreader

这是固定的!感谢Edgar Boda。

我创建了一个应该读取文本文件并将其放入数组的类:

private static String[] parts;

public static void Start() throws IOException{      
    InputStream instream = new FileInputStream("Storyline.txt");
    InputStreamReader inputreader = new InputStreamReader(instream);
    BufferedReader buffreader = new BufferedReader(inputreader);

    int numberOfLines=0, numberOfActions;


    String line = null, input="";

    while((line=buffreader.readLine())!=null){
        line=buffreader.readLine();
        input+=line;

    }
    parts=input.split(";");
}

但是,当我尝试输出数组时,它只包含一个字符串。我放入文件的最后一个。

这是我读的文件:

0;0;
Hello!;
Welcome!To this.;
56;56;
So;

我认为这是循环中的一些东西;但是试图将parts[number]放在那里是行不通的...有什么建议吗?

3 个答案:

答案 0 :(得分:0)

只包含最后一行;你每次都要重新分配parts

parts = line.split(";");

这会破坏先前的引用,并将对新数组的引用重新分配给它。更好的方法可能是使用StringBuilder并附加行然后再拆分:

StringBuilder stringBuilder = new StringBuilder();
while((line=buffreader.readLine())!=null){
    stringBuilder.append(line);
}

parts = stringBuilder.toString().split(";");

这样您就可以在一个数组中获得所需的一切。如果要分割所有一个数组 / 行的所有内容,则需要parts为二维数组。但缺点是你需要知道文件中有多少行。相反,您可以使用List<String[]>来跟踪数组:

List<String[]> lineParts = new ArrayList<String[]>();
while((line=buffreader.readLine())!=null){
    lineParts.add(line.split(";"));
}

答案 1 :(得分:0)

您希望首先将整个文件读入字符串:

String line = null;
String input = "";
while((line=buffreader.readLine())!=null){
    input += line;
}

parts = input.split(";");

答案 2 :(得分:0)

您在parts循环的每次迭代中都覆盖了字符串数组while,这就是为什么它只包含最后一行。

要存储整个文件内容,并且字段已拆分,您需要一个二维数组,而不是一维数组。假设文件中有5行:

private static String[][] parts = new String[5][];

然后将每个拆分数组分配给每个循环parts的元素:

parts[i++]=line.split(";");  // Assuming you define "i" for the line number

此外,split默认情况下会丢弃尾随的空标记。要保留它们,请使用带有limit参数的two-arg overload of split。传递一个负数以保留所有代币。

parts[i++] = line.split(";", -1);