1. 程式人生 > >java切割字串中的回車應注意是\n\r不是\n

java切割字串中的回車應注意是\n\r不是\n

我們在Java中如果用到處理要分隔字串,不免會用到String的split(String regex)函式,這時候我們要注意的。

如果想以回車來分隔字串,很多同學都會這樣做。下面是例子:

String[] res = str.split("\n");

但是這樣可能會有一個潛在的問題,如果我們的str字串是從文字檔案中得到的,那麼就會出現一個隱患。

假如我們的檔案為test.txt,裡面的內容為:

This(回車)

is testing(無回車)

這時候問題就來了。。。

1、如果這個檔案是在Linux或者mac下建立編寫的,那麼用str.split("\n")會出現正確的結果,如下圖:

2、如果這個檔案是在window下編寫的,那麼就該注意了,如果你還是用str.split("\n")就會出現錯誤的結果,如下圖:

有人可能說沒什麼區別啊,仔細看好了,第2個的結果,this和is testing中間有個空行,而第一個沒有。為什麼會出現這個結果。

這還要從回車符來講,簡單來說,window下回車是由\r\n(即0x0D和0x0A)組成的,注意不是\n\r,而linux下回車是由\n(即0x0A)小夥伴們別搞錯了,這個我自己證實過,

這個window下編輯的檔案,我用16進位制開啟的,大家看到第3,4列中的是0D、0A,也就是回車。

而在Linux下是這個樣子的:

這個是linux下的檔案用16進位制開啟的情況,紅圈中只有個0A,也就是回車。

到這裡我們就明白了,剛才在window下用split("\n")出現的結果,則是this\r和is testing兩個部分。

而在linux下用split("\n")出現的結果,則是this和is testing兩個部分,this後面則就沒有\r。