2013-08-20 70 views
0

所以我試圖改變每行幾行文本文件的格式,以使它更簡潔,更易於閱讀。我做了一個簡單的程序,用一個空格替換行中的前三個字符,這三個字符空間就是數字所在的位置。實際的文本直到有更多的空格纔會開始。當我這樣做並打印出最終結果時,它會出現一個帶有問號的鑽石,我假設這是缺少字符的結果。似乎大部分缺失的字符都是撇號符號。如果有人可以讓我知道如何解決它,我真的很感激它:)BufferedReader提供缺失的字符

public class Conversion { 
public static void main(String args[]) throws IOException { 
    BufferedReader scan = null; 
    try { 
     scan = new BufferedReader(new FileReader(new File("C:\\Users\\Nasir\\Desktop\\Beowulftesting.txt"))); 
    } catch (FileNotFoundException e) { 
     System.out.println("failed to read file"); 
    } 

    String finalVersion = ""; 
    String currLine; 
    while((currLine = scan.readLine()) !=null){ 
     if(currLine.length()>3) 
      currLine = " "+ currLine.substring(3); 

     finalVersion+=currLine+"\n"; 
    } 

    scan.close(); 
    System.out.println(finalVersion); 
} 
} 
+0

你怎麼看這些文本文件? – supersam654

+0

你可以隔離輸入文件中發生的部分,並將它與輸出一起發佈嗎? –

回答

0
  1. 而不是使用FileReader的,使用InputStreamReader用正確的文本編碼。我認爲這些奇怪的字符正在出現,因爲您正在使用錯誤的編碼讀取文件。
  2. 順便說一句,請不要像使用+=那樣在循環中使用字符串。相反,使用StringBuilder

    StringBuilder finalVersion = new StringBuilder(); 
    String currLine; 
    while ((currLine = scan.readLine()) != null) { 
        if (currLine.length() > 3) { 
         finalVersion.append(" ").append(currLine.substring(3)); 
        } else { 
         finalVersion.append(currLine); 
        } 
        finalVersion.append('\n'); 
    } 
    
+0

爲什麼你不能在字符串中使用'+ ='? 'string + = .....'無論如何編譯到一個'StringBuilder'。雖然我會同意你的看法,因爲它看起來很乾淨。 –

+1

@JoshM在一個循環中運行'string + = ...'會導致O(n2)性能,因爲每次迭代都必須建立一個新的字符串,每次都複製(越來越長的)字符串。在你調用'toString'之前'StringBuilder'不會構建新的字符串。 –

+0

哦,我從來沒有考慮到這一點,謝謝你對我的啓發。 –