java 输出语句与“\r”那些事儿

 private static final String fileName = "D:/测试/1.txt";
    public static void main(String[] args){
        File file = new File(fileName);
        try {
            InputStream inputStream = new FileInputStream(file);
            int count = inputStream.available();
            byte[] b = new byte[count];
            inputStream.read(b);
            String a = new String(b);
            int n = a.length();
            System.out.println(n);
            for (int i =0;i<n;i++){
                if (a.charAt(i)=='\r'){
                    System.out.print("\\r");
                    continue;
                }
                if (a.charAt(i)=='\n'){
                    System.out.print("\\n");
                    continue;
                }
                System.out.print(a.charAt(i));
            }
            System.out.println();
            System.out.println(a.replaceAll("\r\n",""));
            System.out.println(a.replaceAll("\n",""));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这段代码实现的是从文件中读取数据,然后去掉中间的空。
在这里插入图片描述
执行的结果为:
在这里插入图片描述
问题:为啥替换了’\n’,结果只有一个666。下面我来分析一下:

123\r\n456\r\n789\r\n111\r\n222\r\n333\r\n444\r\n555\r\n666  
# '\n'->''
# 按道理结果应该是这样的,但是,如果是在打印的情况下,这些特殊字符是会起作用的,
# 而\r的作用就是到当前行的行首,会把这一行以前的输出 覆盖掉 ,也就是说\r前面的
# 都会被覆盖掉。所以最后的结果只有 666.
# 而 BufferedReader不存在这个问题,是因为其在实现的时候已经过滤了\r。,
123\r456\r789\r111\r222\r333\r444\r555\r666

那我们把被"“替换”\n"替换掉的字符串循环打印出来:
在这里插入图片描述
可以发现跟我们预想的结果是一样的。所以,可以知道,这就是打印的锅了。在知道这样的结论之后,我们可以做出以下实验:

public static void main(String[] args) {
        String a = "12345678912345678912345678912345789";
        String b = a.replaceAll("5","\r");
        System.out.println(b);
    }

在这里插入图片描述
参考资料:
\r与\n

猜你喜欢

转载自blog.csdn.net/xielinrui123/article/details/88730167
今日推荐