簡體   English   中英

Java中兩個或兩個以上大寫字母的單詞

[英]Words with two or more capital letters in Java

包含至少 2 個大寫字母和任何特殊字母(如 @#$%^&*()_-+= 等等...)的單詞是可選的。

我試過:

 public static boolean isWordHas2Caps(String s) {
        return s.matches("\\b(?:\\p{Ll}*\\p{Lu}){2,}\\p{Ll}*\\b");
    }

但是,我得到

    System.out.println(isWordHas2Caps("eHJHJK"));
    System.out.println(isWordHas2Caps("YUIYUI"));
    System.out.println(isWordHas2Caps("LkfjkdJkdfj"));
    System.out.println(isWordHas2Caps("LLdkjkd"));
    System.out.println(isWordHas2Caps("OhdfjhdsjO"));
    System.out.println(isWordHas2Caps("LLLuoiu9898"));
    System.out.println(isWordHas2Caps("Ohdf&jh/dsjO"));
    System.out.println(isWordHas2Caps("auuuu"));
    System.out.println(isWordHas2Caps("JJJJJJJJ"));
    System.out.println(isWordHas2Caps("YYYY99999"));
    System.out.println(isWordHas2Caps("ooooPPPP"));

輸出:

true   eHJHJK
true   YUIYUI
true   LkfjkdJkdfj
true   LLdkjkd
true   OhdfjhdsjO
false   LLLuoiu9898       It should be true but getting false
false   Ohdf&jh/dsjO      It should be true but getting false
false   auuuu
true   JJJJJJJJ
false   YYYY99999        It should be true but getting false
true   ooooPPPP

我想,我應該在正則表達式和數字以及特殊字母中。 我怎樣才能做到這一點?

您想檢查字符串中是否至少有兩個大寫字母可以包含任意字符。

然后,您可以使用

public static boolean isWordHas2Caps(String s) {
    return Pattern.compile("\\p{Lu}\\P{Lu}*\\p{Lu}").matcher(s).find();
}

請參閱Java 演示

或者,如果您仍然想使用String#matches您可以使用以下內容(請記住,我們需要匹配整個字符串):

public static boolean isWordHas2Caps(String s) {
    return s.matches("(?s)(?:\\P{Lu}*\\p{Lu}){2}.*");
}

(?s)(?:\\\\P{Lu}*\\\\p{Lu}){2}.*正則表達式匹配

  • (?s) - Pattern.DOTALL嵌入標志選項(使.匹配任何字符)
  • (?:\\P{Lu}*\\p{Lu}){2} - 除大寫字母和大寫字母之外的任意零個或多個字符出現兩次
  • .* - 字符串的其余部分。

您的代碼沒有返回預期的結果,因為它們都包含非字母字符,而String#matches()需要對模式進行完整的字符串匹配,而您的則匹配僅包含字母的字符串。

這就是為什么你應該

  • 確保您可以匹配字符串中的任何位置, Matcher.find最適合此工作
  • \\p{Lu}\\P{Lu}*\\p{Lu}模式將找到大寫字母 + 任何零個或多個非字母 + 大寫字母的任何序列
  • 或者,您可以使用(?s)(?:\\P{Lu}*\\p{Lu}){2}.* regex 匹配包含至少兩個大寫字母的完整字符串。

更新:

anubhava的寶貴意見:

可能是s.matches("(?:\\\\S*\\\\p{Lu}){2}\\\\S*"); 可能更好

上述解決方案的演示

原答案:

您可以使用正則表達式\\b.*\\p{Lu}.*\\p{Lu}.*\\b ,如下所示:

public static boolean isWordHas2Caps(String s) {
    return s.matches("\\b.*\\p{Lu}.*\\p{Lu}.*\\b");
}

演示:

public class Main {
    public static void main(String[] args) {
        System.out.println(isWordHas2Caps("eHJHJK"));
        System.out.println(isWordHas2Caps("YUIYUI"));
        System.out.println(isWordHas2Caps("LkfjkdJkdfj"));
        System.out.println(isWordHas2Caps("LLdkjkd"));
        System.out.println(isWordHas2Caps("OhdfjhdsjO"));
        System.out.println(isWordHas2Caps("LLLuoiu9898"));
        System.out.println(isWordHas2Caps("Ohdf&jh/dsjO"));
        System.out.println(isWordHas2Caps("auuuu"));
        System.out.println(isWordHas2Caps("JJJJJJJJ"));
        System.out.println(isWordHas2Caps("YYYY99999"));
        System.out.println(isWordHas2Caps("ooooPPPP"));
    }

    public static boolean isWordHas2Caps(String s) {
        return s.matches("\\b.*\\p{Lu}.*\\p{Lu}.*\\b");
    }
}

輸出:

true
true
true
true
true
true
true
false
true
true
true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM