我使用以下方法来检测字符是否为空格:
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
的情况下检测换行符?
答案 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')