检测`char []`中的换行符

时间:2014-09-18 14:12:03

标签: java text character

我使用以下方法来检测字符是否为空格:

Character.isWhiteSpace(char character);

现在我需要检测所有平台(Linux,Windows,Mac OSX等)的换行符\n\r等)的所有变体。 )。有没有类似的方法来检测字符是否换行?如果没有,我如何检测所有可能的变体?


根据评论进行修改:由于我不知道换行符可以用多个字符表示,我会在问题中添加一些上下文。

我在write(char[] buffer, int offset, int length)中实施Writer方法(请参阅Javadoc)。除了其他操作,我还需要检测buffer内的换行符。我试图避免从String创建buffer以保留记忆,因为我已经看到有时buffer太大(几MB)。

有没有办法在不创建String的情况下检测换行符?

3 个答案:

答案 0 :(得分:7)

使用正则表达式为您完成工作:

if (!String.valueOf(character).matches("."))

如果没有DOTALL开关,则点匹配除换行符之外的所有字符,根据documentation包括:

  • 换行符(换行符)('\n'),
  • 回车符后面紧跟换行符("\r\n"),
  • 一个独立的回车符('\r'),
  • 下一行字符('\u0085'),
  • 行分隔符('\u2028')或
  • 段落分隔符('\u2029)。

请注意,换行序列存在,例如\r\n,但您询问了个别字符。正则表达式解决方案可以使用一个或两个char输入。

答案 1 :(得分:1)

正如我在评论中发布的那样,行分隔符并不总是“字符”,而是一系列字符,具体取决于平台。为了独立,它看起来像这样:

public String[] splitLines(String input) {
    return input.split("(\r\n|\r|\n)");
}

基于这个答案:

Match linebreaks - \n or \r\n?

然而,这意味着正则表达式匹配,而不是字符匹配......但是从缓冲区中获取字符串应该是可以实现的......

答案 2 :(得分:0)

您可以使用

获取与OS相关的行分隔符
System.getProperty("line.separator")

这将返回一个字符串。

但是因为你正在尝试使用char,检查char是否是' \ n'或者' r'是对的。

if(yourChar == '\r' || yourChar == '\n')