【问题标题】:How check that string is NOT blank by java regular expression?如何通过java正则表达式检查该字符串是否为空?
【发布时间】:2013-08-21 12:04:41
【问题描述】:

finding blank string 有正则表达式,我只想要否定。我也看到了this question,但它不适用于 java(参见示例)。 Solution 也不适用于我(参见示例中的第 3 行)。

例如

Pattern.compile("/^$|\\s+/").matcher(" ").matches() - false
Pattern.compile("/^$|\\s+/").matcher(" a").matches()- false
Pattern.compile("^(?=\\s*\\S).*$").matcher("\t\n a").matches() - false

在这两种情况下都返回 false。

P.S.如果有不清楚的地方问我问题。

更新

我想在@Pattern 注解中使用这个正则表达式,而不为它创建自定义注解和编程验证器。这就是为什么我想要一个不使用find 函数的“普通”正则表达式解决方案。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    不清楚你所说的否定是什么意思。

    如果你的意思是“一个至少包含一个非空白字符的字符串”,那么你可以这样使用:

    Pattern.compile("\\S").matcher(str).find()
    

    如果真的有必要使用matches,那么你可以这样做。

    Pattern.compile("\\A\\s*\\S.*\\Z").matcher(str).matches()
    

    这仅匹配 0 个或多个空格,后跟一个非空格,后跟任何字符,直到字符串的末尾。

    如果你的意思是“一个至少包含一个这样的字符的非空白字符串”,那么你可以使用这个:

    Pattern.compile("\\A\\S+\\Z").matcher(str).matches()
    

    你需要学习Java regex syntax。在 Java 中,正则表达式是从字符串编译而来的,因此不需要像在其他语言中看到的 /.../%r{...} 这样的特殊分隔符。

    【讨论】:

    • 恭喜你获得 10k!
    • @JoachimSauer 谢谢。
    • Pattern.compile("\\S").matcher("abc").matches() - false,但必须为 true。您的解决方案仅适用于字符串中的 1 个字符。
    • @Cherry 使用find 而不是match。我编辑了答案以明确说明。
    • @Cherry 那你所说的否定是什么意思?所有空格的字符串的对立面是不是所有空格的字符串,它是包含至少一个非空格的字符串。这就是我给你的正则表达式......
    【解决方案2】:

    这个怎么样:

    if(!string.trim().isEmpty()) {
        // do something
    }
    

    【讨论】:

    【解决方案3】:

    使用 regex \s :空格字符:\t\n\x0B\f\r

    Pattern.compile("\\s")
    

    【讨论】:

    • 仅适用于 1 个字符的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2013-04-29
    • 2011-04-29
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多