作者:Sun1956
原文:https://blog.csdn.net/sun1956/article/details/45096117
---------------------
我們在Java中如果用到處理要分隔字符串,不免會用到String的split(String regex)函數,這時候我們要注意的。
如果想以回車來分隔字符串,很多同學都會這樣做。下面是例子:
String[] res = str.split("\n");
但是這樣可能會有一個潛在的問題,如果我們的str字符串是從文本文件中得到的,那么就會出現一個隱患。
假如我們的文件為 test.txt ,里面的內容為:
This(回車)
is testing(無回車)
這時候問題就來了。。。
1、如果這個文件是在Linux或者mac下建立編寫的,那么用str.split("\n")會出現正確的結果,如下:
This
is testing
2、如果這個文件是在window下編寫的,那么就該注意了,如果你還是用str.split("\n")就會出現錯誤的結果,如下:
This
is testing
有人可能說沒什么區別啊,仔細看好了,第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。
這個隱患的細節,還要多多注意。