【问题标题】:Check if String is only line breaks检查字符串是否只是换行符
【发布时间】:2015-03-18 10:11:12
【问题描述】:

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

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

只有在包含换行符的情况下才会返回 false。

【问题讨论】:

  • 字符是指字母吗?那么带有 wgite 字符的数字会 pss 对吗?
  • 一切都会过去,除了\n

标签: java string line-breaks


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

    • @MarounMaroun 对于这个 "\n\r" 输入,这个 System.out.println(Path1.matches("[\n\r]+")); 返回 true。你知道为什么吗?
    • 在正则表达式中,\n\\n 在大多数情况下是相同的。其他正则表达式转义是不同的,因为 Java 编译器不直接支持它们。
    • @AaronDigulla 是的,我想是的。
    • @AvinashRaj \r\n 有效,但是如果您尝试 \d 它将是编译错误,因为必须转义反斜杠,但 Java 已经知道 \n 和 @ 987654332@ 是。如果您写\\n,则与\n 相同。
    • 是的,我知道其他转义序列,如\d,\S,\s 等。@Aaron 清除了我的疑虑。谢谢你们俩..
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      不可能,你写的

      只有换行符,没有字符

      和换行符是特殊字符。退后一步,想想你想解决什么问题。是否只是检查是否给出了至少一个可打印字符?然后修剪()字符串并检查长度()是否> 0。否则上面的正则表达式是一个好的。

      【讨论】:

        【解决方案5】:

        如果您必须检查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]+");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-27
          • 2022-12-01
          • 2011-07-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多