我正在尝试更改字符串的行结尾,具体取决于设置。基本上我有字符串,大部分是LF结尾,很少有其他东西,但它发生了,我希望能够将它们更改为CRLF或CR,如果被问到,或者确保它们纯粹是LF,如果有人问的话。源和目标平台因操作系统而异,因此我想根据需要更改行结尾。
目前我正在使用此代码
if(this.eolCharacter.equalsIgnoreCase("CR")){
//replaces all \r\n with \r
//replaces all \n that are not preceded by \r with \r
return input.replaceAll("\\r\\n", "\r").replaceAll("\\n", "\r");
}else if(this.eolCharacter.equalsIgnoreCase("LF")){
//replaces all \r\n with \n
//replaces all \r with \n
return input.replaceAll("\\r\\n", "\n").replaceAll("\\r", "\n");
}else{
//replaces all \n that are not preceded by \r
//replaces all \r that are not followed by \n
return input.replaceAll("(?<!\\r)\\n", "\r\n").replaceAll("\\r(?!\\n)", "\r\n");}
我有点担心这段代码可能是脆弱的,或者我在正则表达式中遗漏了一些东西,所以我想知道是否有本地方法可以做到这一点,它是Java 6,我们正在使用Apache StringUtils,如果这可能有帮助。
感谢您的任何意见!
答案 0 :(得分:2)
看起来它会起作用,但正如EJP所说,你不应该这样做,它可以简化如下:
if(this.eolCharacter.equalsIgnoreCase("CR")){
return input.replaceAll("(\\r)?\\n", "\r");
}else if(this.eolCharacter.equalsIgnoreCase("LF")){
return input.replaceAll("\\r(\\n)?", "\n");
}else{
return input.replaceAll("((\\r)?\\n)|(\\r(?!\\n))", "\r\n");
}