Java String.split()函數分隔回車注意事項


作者: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。

這個隱患的細節,還要多多注意。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM