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,因此成本不高:。如果需要涵盖所有情况,则必须进行正则表达式匹配,而不是字符匹配。。。