Java 检测'char[]中的换行符`
我使用以下方法来检测字符是否为空白:Java 检测'char[]中的换行符`,java,text,character,Java,Text,Character,我使用以下方法来检测字符是否为空白: Character.isWhiteSpace(char character); 现在,我需要检测所有平台(Linux、Windows、Mac OSX等)的换行符的所有变体(\n、\r,等等)。有没有类似的方法来检测字符是否为换行符?如果没有,我如何检测所有可能的变体 从评论编辑:因为我不知道换行符可以用几个字符表示,所以我给问题添加了一些上下文 我正在编写器中实现写入(char[]buffer,int offset,int length)方法(请参阅)。
Character.isWhiteSpace(char character);
现在,我需要检测所有平台(Linux、Windows、Mac OSX等)的换行符的所有变体(\n
、\r
,等等)。有没有类似的方法来检测字符是否为换行符?如果没有,我如何检测所有可能的变体
从评论编辑:因为我不知道换行符可以用几个字符表示,所以我给问题添加了一些上下文 我正在
编写器中实现写入(char[]buffer,int offset,int length)
方法(请参阅)。除了其他操作之外,我还需要检测缓冲区内的换行符。我试图避免从缓冲区创建字符串
,以保留内存,正如我看到的那样,有时缓冲区
太大(几MB)
是否有任何方法可以在不创建字符串的情况下检测换行?使用正则表达式为您完成以下工作:
if (!String.valueOf(character).matches("."))
如果不使用DOTALL
开关,点将匹配除换行符以外的所有字符,根据包括:
- 换行符(换行符)字符(
'\n'
)
- 紧接着换行符(
“\r\n”
)的回车符
- 独立的回车符(
'\r'
)
- 下一行字符(
'\u0085'
)
- 行分隔符(
'\u2028'
),或
- 段落分隔符(
”\u2029
)
请注意,存在换行序列,例如\r\n
,但您询问了单个字符。正则表达式解决方案将使用一个或两个字符输入。您可以使用
System.getProperty("line.separator")
这将返回一个字符串
但由于您正在尝试使用char,因此检查char是“\n”还是“r”是正确的
if(yourChar == '\r' || yourChar == '\n')
正如我在评论中所说,行分隔符并不总是一个“字符”,而是一系列字符,具体取决于平台。要独立,它将如下所示:
public String[] splitLines(String input) {
return input.split("(\r\n|\r|\n)");
}
根据这一回答:
然而,这意味着正则表达式匹配,而不是字符匹配。。。但是,从缓冲区中获取字符串应该是可以实现的…检查char是否为System.getProperty(“line.separator”)您所说的“etc”是什么意思?请记住,在Windows上,普通分隔符是“\r\n”
,因此不是单个字符。你想解决什么更大的问题?如果你想把一个字符串分解成线,考虑使用<代码> BufferedReader < /> >包装一个<代码> StringReader <代码>。@ Jon Switt不知道一个断线可以用两个字符表示,谢谢你的邀请advice@ThusithaThilinaDayaratne谢谢你的建议,但我一直在寻找一种方法来检测字符的换行character@JaviFern安德兹,这应该是一条路。但是,您不能在Java中“逐个字符”测试换行符,因为它通常是一个序列。所以你需要在字符串中找到序列…谢谢你的回答!是否没有其他换行符?这对窗户也有用吗?@JaviFernández我挖得更深一些——还有其他的。请参阅答案,以及更完整的solution@Martin正则表达式方法也适用于序列,例如@Martin注释中的“\r\n”
这只适用于字符,不适用于序列,但换行符的所有可能字符列表是我一直在寻找的内容之一,谢谢@JaviFernández,这没有什么不便,只是一个建议,让你的问题尽可能有价值,并得到最好的答案。那么换行符是否只有两个可能的字符?非常感谢你的回答@Martin,但为每个缓冲区创建一个字符串是我试图避免的事情之一。我会把这个答案考虑在内,如果你选择另一种方法的话。那很好。。。也许你需要看看你的字符缓冲区是从哪里来的。。。如果你要在编写器中使用它,它必须在某个地方生成,我假设它来自一个字符串。。。如果您查看(char[]
)的字符串构造函数,它使用Arraycopy,因此成本不高:。如果需要涵盖所有情况,则必须进行正则表达式匹配,而不是字符匹配。。。