Java BufferedReader提供缺少的字符
所以我试图改变一个文本文件的格式,它每隔几行就有行号,只是为了让它更干净,更容易阅读。我制作了一个简单的程序,将一行的前三个字符全部替换为空格,这三个字符的空格就是数字的位置。实际的文本在多输入几个空格后才会开始。当我这样做并打印出最终结果时,结果是一个带有问号的菱形,我假设这是缺少字符的结果。似乎大多数缺少的字符都是撇号符号。如果有人能让我知道如何修复它,我将非常感激:)Java BufferedReader提供缺少的字符,java,bufferedreader,Java,Bufferedreader,所以我试图改变一个文本文件的格式,它每隔几行就有行号,只是为了让它更干净,更容易阅读。我制作了一个简单的程序,将一行的前三个字符全部替换为空格,这三个字符的空格就是数字的位置。实际的文本在多输入几个空格后才会开始。当我这样做并打印出最终结果时,结果是一个带有问号的菱形,我假设这是缺少字符的结果。似乎大多数缺少的字符都是撇号符号。如果有人能让我知道如何修复它,我将非常感激:) 不要使用FileReader,而是使用具有正确文本编码的InputStreamReader。我认为出现奇怪的字符是因为您读
FileReader
,而是使用具有正确文本编码的InputStreamReader
。我认为出现奇怪的字符是因为您读取的文件编码错误+=
。相反,请使用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');
}
您是如何查看这些文本文件的?能否将输入文件中发生这种情况的部分隔离出来,并将其与输出一起发布?为什么不能对字符串使用
+=
<代码>字符串+=…编译为StringBuilder
。虽然我同意你的看法,因为它看起来更干净。@JoshM在循环中运行string+=…
将导致O(n²)性能,因为每次迭代都必须生成一个新字符串,每次复制(越来越长)字符串StringBuilder
在您调用toString
之前不会生成新字符串。哦,我从来没有考虑过这一点,谢谢您启发我。
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');
}