簡體   English   中英

Java BufferedReader轉換為字符串數組

[英]Java BufferedReader to String Array

我在這里檢查了很多關於stackoverflow的不同主題,但到目前為止找不到任何有用的東西:/

所以這是我的問題。 我正在寫文件復印機。 在讀取文件時已經出現問題。 我的測試文檔有3行隨機文本。 所有這三行都應寫入字符串數組中。 問題是只有textdocument的第二行被寫入數組,而我不知道為什么。 已經調試過了,但是沒有進一步了解我。

我知道對於具有不同類的文件復印機有不同的解決方案。但是我真的很想讓它與我在這里使用的類一起運行。

    String[] array = new String[5];
    String datei = "test.txt";
    public String[] readfile() throws FileNotFoundException {
    FileReader fr = new FileReader(datei);
    BufferedReader bf = new BufferedReader(fr);
    try {
        int i=0;
        //String  Zeile = bf.readLine();
        while(bf.readLine() != null){
            array[i] = bf.readLine();
        //  System.out.println(array[i]);  This line is for testing
            i++;
        }
        bf.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
    return array;

對於循環的每次迭代,您都要調用readLine()兩次,從而丟棄其他所有行。 您需要捕獲每次readLine()調用返回的值,因為每個readLine()調用都會提高讀取器在文件中的位置。

這是慣用的解決方案:

String line;
while((line = bf.readLine()) != null){
    array[i] = line;
    i++;
}

在這里您讀了兩行:

   while(bf.readLine() != null){
        array[i] = bf.readLine();
    //  System.out.println(array[i]);  This line is for testing
        i++;
    }

您必須將代碼更改為:

   String line = null;
   while((line =bf.readLine()) != null){
        array[i] = line;
    //  System.out.println(array[i]);  This line is for testing
        i++;
    }

問題在這里:

while(bf.readLine() != null)

readLine()讀取一行並在移至下一行的同時返回同一行。

因此,不僅要檢查返回的值是否為null還要存儲它。

String txt = null;
while((txt = bf.readLine()) != null)
    array[i++] = txt;

我認為是因為您兩次調用readLine()。 第一次循環,然后第二次將其放入數組。 因此,它在循環的開頭(第1行)讀取一行,然后在循環中讀取第一行代碼(您看到的第2行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM