检查 String 是否只有换行符

Check if String is only line breaks

我正在尝试检查给定的字符串是否只包含换行符而没有字符。我用这个方法

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

它只有在包含换行符时才会 return false。

为什么不针对此正则表达式对其进行测试?

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

此正则表达式将匹配包含 \n\r.

集合中的一个或多个字符的所有字符串

一种方法是用空白字符串替换 \n 并检查是否还有任何内容:

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

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

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

I am trying to check if a given String contains only line breaks and no characters.

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

"[\n\r]+" 匹配一个或多个换行符或回车 return 字符。如有必要,还可在字符 class 内使用 \f换页)。

输出:

true
false

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

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

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

Java 7 具有 System.lineSeparator() 方法,它允许您执行与 System.getProperty("line.separator").

相同的操作

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

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

不可能,你写的

only line breaks and no characters

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