使用Java在Windows而不是Linux上工作的简单正则表达式
在windows下使用Eclipse,我试图将文本分为两部分,一部分从开始到第一行结束,另一部分是它的其余部分使用Java在Windows而不是Linux上工作的简单正则表达式,java,regex,Java,Regex,在windows下使用Eclipse,我试图将文本分为两部分,一部分从开始到第一行结束,另一部分是它的其余部分 String[] result = resumen.split("\\R", 2); String firstpart = result[0]; String rest = result[1]; 工作正常 但是在Linux机器上,我得到了一个错误: Exception in thread "main" java.util.regex.PatternSyntaxException: I
String[] result = resumen.split("\\R", 2);
String firstpart = result[0];
String rest = result[1];
工作正常
但是在Linux机器上,我得到了一个错误:
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1
\R
所以我在网上的某个地方读到了,这样我就可以使用:
String[] result = resumen.split("\\\\R", 2);
但这并没有像预期的那样起作用,也没有分裂句子
如何调整代码,使其也能在linux机器上工作
提前感谢。听起来Linux机器有一个较旧版本的Java,并且
\R
是在该版本之后添加的
\R
在中。它不在里面
如果您需要支持Java 7,文档会说\R
相当于\u000D\u000A |[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
基于此:
String[] result = resumen.split("\\u000D\\u000A|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]", 2);
但我认为,如果我们将这些字符作为文字字符而不是unicode转义符提供给正则表达式引擎,我们就可以了,因此:
String[] result = resumen.split("\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]", 2);
(但是测试一下。)听起来像Linux机器有一个旧版本的Java,并且
\R
是在该版本之后添加的
\R
在中。它不在里面
如果您需要支持Java 7,文档会说\R
相当于\u000D\u000A |[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
基于此:
String[] result = resumen.split("\\u000D\\u000A|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]", 2);
但我认为,如果我们将这些字符作为文字字符而不是unicode转义符提供给正则表达式引擎,我们就可以了,因此:
String[] result = resumen.split("\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]", 2);
(但要测试一下。)@XtremeBaumer:如果目标是跨平台匹配换行符,则不需要。@XtremeBaumer:Windows,但与其说是平台,不如说是字符串内容。如果字符串中有Windows样式的换行符,则在
\n
上拆分将在结果字符串中保留\r
。看看\R
的等价物,还有更多奇异的换行符。如果我读一个有两行的文本文件,并使用System.out.print(line)代码>我没有得到两行作为输出?@XtremeBaumer:这取决于你如何读取文件;听起来断线已经正常化了。但同样,它是关于字符串内容的<代码>“foo\r\nbar”.split(\\n”)[0]。长度()
是4,不是3“foo\r\nbar”.split(\\r”)[0].length()
根据需要为3。为什么不使用System.getProperty(“line.separator”)
来获取正确的换行符?@XtremeBaumer:如果目标是跨平台匹配换行符,则不需要。@XtremeBaumer:Windows,但它不是平台,而是字符串内容。如果字符串中有Windows样式的换行符,则在\n
上拆分将在结果字符串中保留\r
。看看\R
的等价物,还有更多奇异的换行符。如果我读一个有两行的文本文件,并使用System.out.print(line)代码>我没有得到两行作为输出?@XtremeBaumer:这取决于你如何读取文件;听起来断线已经正常化了。但同样,它是关于字符串内容的<代码>“foo\r\nbar”.split(\\n”)[0]。长度()
是4,不是3<代码>“foo\r\nbar”.split(\\r”)[0]。length()根据需要为3。为什么不使用System.getProperty(“line.separator”)
获取正确的换行符?另请参阅。另请参阅。