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