我们在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。

本文深入探讨了在Java中使用split方法处理字符串时,如何正确处理不同操作系统(如Windows、Linux和Mac)下的换行符。文章通过实例说明,在不同平台上,回车符的表现形式不同,可能导致数据解析错误,并提供了跨平台兼容的解决方案。

被折叠的 条评论
为什么被折叠?



