1. 程式人生 > >Java中的回車(\r)和換行(\n)

Java中的回車(\r)和換行(\n)

\n是換行符,這並不是java中的規定,而是更廣泛的計算機領域中均為此含義。
1、提到\n就不能不提\r(回車),下面,詳細講解一下:
在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鐘可以打10個字元。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。
於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字元。一個叫做“回車”,告訴打字機把列印頭定位在左邊界;另一個叫做“換行”,告訴打字機把紙向下移一行。
這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。
後來,計算機發明瞭,這兩個概念也就被般到了計算機上。那時,儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加一個就可以。於是,就出現了分歧。
Unix系統裡,每行結尾只有“<換行>”,即“\n”;
Windows系統裡面,每行結尾是“<換行><回車>”,即“\n\r”;
Mac系統裡,每行結尾是“<回車>”。一個直接後果是,Unix/Mac系統下的檔案在Windows裡開啟的話,所有文字會變成一行;而Windows裡的檔案在Unix/Mac下開啟的話,在每行的結尾可能會多出一個^M符號。
\r回車是將游標移到一行的前面
\n是移到下一行
2、示例
System.out.print(“\n”);
如上程式碼表示在控制檯中換一行
以上內容引自:

https://zhidao.baidu.com/question/399628743.html

注意:在Java中nextInt()方法接收一個整型字元,不會讀取\n,nextline()讀入一行文字,會讀入”\n”字元,但”\n”並不會成為返回的字元

例1:

import java.util.Scanner;

/**
 * Created by Administrator on 2017/8/31.
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while
(sc.hasNext()) { String s=sc.nextLine(); int k=sc.nextInt(); System.out.println(s); System.out.println(k); } } }

來看一下上面程式碼的執行結果
這裡寫圖片描述
當我輸入abc時程式拋錯:
當我進行第一輪次輸入時:
s=’abcd\n\r’
k=’5\r’
此時控制檯輸入第一個5的那行還有一個‘\n’沒有被讀取
當我進行第二輪次輸入時:
s=’\n’
k=’abc’
這時的s自動讀到的上一次未讀的‘\n’,我們再輸入數時就是給k賦值了,而我輸入的是abc所以拋錯。
當然在真正執行程式時,並不會讀取‘\n\r’以上僅為模擬,方便理解。真實讀取情況如下:
當我進行第一輪次輸入時:
s=’abcd’
k=’5’
此時控制檯輸入第一個5的那行還有一個‘\n’沒有被讀取
當我進行第二輪次輸入時:
s=”
k=’abc’

例2:當我將上例中的剩餘的‘\n’給‘吃掉’時,就不會出現錯誤

import java.util.Scanner;

/**
 * Created by Administrator on 2017/8/31.
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()) {
            String s=sc.nextLine();
            int k=sc.nextInt();
            String ss=sc.nextLine();
            System.out.println(s);
            System.out.println(k);
        }
    }
}

來看一下上面程式碼的執行結果:
這裡寫圖片描述
程式正常輸入
當我進行第一輪次輸入時:
s=’abcd\n\r’
k=’5\r’
ss=’\n’
此時控制檯輸入第一個5的那行還有一個‘\n’沒有被讀取
當我進行第二輪次輸入時:
s=’abc\n\r’
k=”5\r
ss=’\n’

此時程式執行正常

例3:當我們在控制檯進行輸入輸出容易丟擲java.lang.NumberFormatException: For input string: “”錯誤

import java.util.Scanner;

/**
 * Created by Administrator on 2017/8/31.
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()) {
            int k=Integer.parseInt(sc.nextLine());
            String s=sc.nextLine();
            int k1=sc.nextInt();
            System.out.println(k);
            System.out.println(s);
            System.out.println(k1);
        }
    }
}

來看一下上面程式碼的執行結果:
這裡寫圖片描述
當我輸入第二輪次的5時程式拋錯
這是因為當我首次進行第二輪次輸入時sc.nextLine()讀到的是第一輪次k1未讀到的‘\n’,實際是‘’,而‘’是不能夠轉換為整數的包裝型別的所以出錯。
如果在程式碼末尾追加sc.r=nextline(), 把’\n’吃掉,程式執行正常。