检查String是否只是换行符

时间:2015-01-20 08:48:14

标签: java string line-breaks

我正在尝试检查给定的String是否只包含换行符而不包含任何字符。我用这个方法

boolean breaksNoLetters(String msg) {
   if (!msg.matches(".*[a-zA-Z]+.*") && msg.contains("\n")) {
       return true;
   } else {
       return false;
   }
}

如果它包含换行符,则它不会返回false。

5 个答案:

答案 0 :(得分:10)

为什么不对这个正则表达式进行测试?

if (msg.matches("[\\n\\r]+")) { }

此正则表达式将匹配包含\n\r集中的一个或多个字符的所有字符串。

答案 1 :(得分:5)

  

我正在尝试检查给定的String是否只包含换行符而不包含任何字符。

String Path1 = "\n\r";
String Path2 = "foo\nbar";
System.out.println(Path1.matches("[\\n\\r]+"));
System.out.println(Path2.matches("[\\n\\r]+"));

"[\\n\\r]+"匹配一个或多个新行或回车符。如有必要,还可以在字符类中使用\\f表单提要)。

输出:

true
false

答案 2 :(得分:2)

一种方法是用空字符串替换\n并检查是否还有剩余字符:

boolean breaksNoLetters(String msg) {
   return !msg.replace("\n", "").isEmpty();
}

编辑:
使用Java 8的流,很容易检查所有字符实际上是\n s:

boolean justLineBreaks = msg.chars().allMatch(c -> c == '\n');

答案 3 :(得分:1)

如果您必须检查String是否包含只有一个 换行符而没有其他字符,请使用equals()方法:

public boolean isLineBreak(String line) {
    return line.equals(System.getProperty("line.separator"));
}

我给你的另一个建议是,使用System.getProperty("line.separator")方法获取行分隔符字符,因为它是平台无关的。例如, UNIX 使用\n Windows \r\n。使用这种方法,你不必关心它。

Java 7具有System.lineSeparator()方法,允许您执行与System.getProperty("line.separator")相同的操作。

否则,如果您必须检查String是否包含一个或多个 换行符,只需使用:

public boolean isLineBreak(String line) {
    return line.matches("[\\n\\r]+");
}

答案 4 :(得分:1)

不可能,你写了

  

只有换行符,没有字符

和换行符是特殊字符。退一步思考你想要解决的问题。是否仅仅检查是否给出了至少一个可打印的字符?然后trim()字符串并检查length()> 0.否则上面的RegEx是一个很好的。