Wan*_*rer 3 java string newline
我知道类似的问题已经被问过好几次了,但我看到的答案要么是解决方法,要么根本就是错误的。
基本问题相当简单:一个方法给我一个从文件中读取的字符串,我需要检查该字符串是否包含换行符。
现在到棘手的部分:维基百科当前列出了八种类型的字符或字符组合,根据系统的不同,它们可能表示换行符。因此,检查我经常读到的常见答案\n和\r并不是正确的方法。遍历字符串并将其字符与 进行比较System.getProperty("line.separator")也可能会失败,因为可能的换行符表示形式是“\r\n”,这将触发此比较两次,尽管它只有一个换行符。
然而,这必须是可能的。我缺少什么选择?
您可以将正则表达式模式^(.*)$与修饰符一起使用Pattern.MULTILINE。检查字符串是否包含任何换行符的方法如下所示:
static boolean containsNewLine(String str) {
Pattern regex = Pattern.compile("^(.*)$", Pattern.MULTILINE);
return regex.split(str).length > 0;
}
Run Code Online (Sandbox Code Playgroud)
它将字符串分成 n 个部分,具体取决于换行符的数量。如果字符串包含任何换行符,则length将会大于 0。
通常^和$ 只会匹配字符串的开头和结尾,但您可以通过传递 来更改此行为Pattern.MULTILINE。来自文档:
在多行模式下,表达式 ^ 和 $ 分别匹配行终止符或输入序列末尾的后面或前面。默认情况下,这些表达式仅在整个输入序列的开头和结尾匹配。