我正在尝试检查给定的String是否只包含换行符而不包含任何字符。我用这个方法
boolean breaksNoLetters(String msg) {
if (!msg.matches(".*[a-zA-Z]+.*") && msg.contains("\n")) {
return true;
} else {
return false;
}
}
如果它包含换行符,则它不会返回false。
答案 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是一个很好的。