[英]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.