Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BufferedReader提供缺少的字符_Java_Bufferedreader - Fatal编程技术网

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');
    }