字符串匹配所有26个A到Z字符

时间:2015-01-21 17:11:38

标签: java regex string

如何检查字符串是否包含a到z的所有26个字符? 我正在尝试这个,但它没有给出解决方案,因为我想打印是的,如果字符串有所有26个字符,否则没有。

import java.util.Scanner;

class CompleteString {

    static int MyFun(String s)
    { 
        if(! s.matches(".*[^a-z].*") )
            System.out.println("YES");
        else
            System.out.println("NO");
        return 0 ;

    }
    public static void main(String args[] ) 
    {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        for(int i=0;i<=T;i++)
            {
                String s1 = in.nextLine();
                int result = MyFun( s1);
                System.out.println(result);

            }
    }
}

3 个答案:

答案 0 :(得分:2)

如果你想确保字母表中的所有26个字母都出现在字符串中,而不仅仅是重复字母的某些组合,那么使用正则表达式似乎是一种不好的方法。通过字母表的简单循环将是我的方法。 e.g:

boolean containsWholeAlphabet(String input){
    boolean matches = true;
    for (char ch = 'a'; ch <= 'z'; ch++){
        if (!input.toLowerCase().contains(String.valueOf(ch))){
            matches = false;
        }
    }
    return matches;
}

答案 1 :(得分:1)

你可以用两种方式做到这一点。

1)写一个正则表达式     (?=.*a)(?=.*b)(?=.*c)...(?=.*z).*

此正则表达式检查每个字母表中的一个匹配项。

2)为每个字符匹配写一​​个for循环。

for (char c = 'a'; c <= 'z'; c++) {
    if (str.indexOf(c) == -1) {
        return false;
    }
}

答案 2 :(得分:0)

如果您只查找a-z字母,那么非常简单

char[] chars = "souRce".toCharArray();
for(char c : chars){
   if(!(c >= 'a' && c <='z')){
          // fail on first occurence itself to avoid remaining characters
          System.out.println("source contains other letters");
          break;
      }
 }