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