2013-08-20 19 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

哦,我从来没有考虑到这一点,谢谢你对我的启发。 –