检查String是否仅包含字母

kod*_*ill 76 java string

我们的想法是读取一个String并验证它是否包含任何数字字符.所以像"smith23"这样的东西是不可接受的.

ada*_*shr 130

你想要什么?速度还是简单?为了速度,请采用基于循环的方法.为简单起见,请采用基于RegEx的单线程方法.

速度

public boolean isAlpha(String name) {
    char[] chars = name.toCharArray();

    for (char c : chars) {
        if(!Character.isLetter(c)) {
            return false;
        }
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

简单

public boolean isAlpha(String name) {
    return name.matches("[a-zA-Z]+");
}
Run Code Online (Sandbox Code Playgroud)

  • 我可能在这里是pendantic,但"isLetter"与[a-zA-Z]不一样 (13认同)
  • 请记住,在Java中,`char []`将被编码为UTF-16.这意味着当使用`Character.isLetter(char)`单独检查时,多字符字形(其中两个字符都在代理范围内)将无法被识别为字母.(参见http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#supplementary)相反,你需要使用`String.codePointAt()`和`Character的组合.isLetter(INT)`.当然,如果您确定*确定*字符串中的字符是ASCII或扩展的单字符编码范围,那么上述答案将起作用. (2认同)

Max*_*ysh 64

Java 8 lambda表达式.既快又简单.

boolean allLetters = someString.chars().allMatch(Character::isLetter);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,allMatch需要API级别24 (4认同)
  • @Journeycorner谢谢!我把这个添加到了答案中. (3认同)

Rob*_*ond 35

或者,如果您使用的是Apache Commons,[StringUtils.isAlpha()].


mar*_*ite 6

一个快速的方法是:

public boolean isStringAlpha(String aString) {
    int charCount = 0;
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    if (aString.length() == 0) {
        return false; //zero length string ain't alpha
    }

    for (int i = 0; i < aString.length(); i++) {
        for (int j = 0; j < alphabet.length(); j++) {
            if (aString.substring(i, i + 1).equals(alphabet.substring(j, j + 1))
                    || aString.substring(i, i + 1).equals(alphabet.substring(j, j + 1).toLowerCase())) {
                charCount++;
            }
        }

        if (charCount != (i + 1)) {
            System.out.println("\n**Invalid input! Enter alpha values**\n");
            return false;
        }
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

因为您不必运行整体aString来检查它是否不是alpha字符串.


小智 6

我使用了这个正则表达式(".*[a-zA-Z]+.*").使用if not语句,它将避免所有在前面,末尾或任何类型的其他字符之间有字母的表达式.

String strWithLetters = "123AZ456";
if(! Pattern.matches(".*[a-zA-Z]+.*", str1))
 return true;
else return false
Run Code Online (Sandbox Code Playgroud)


sha*_*mus 5

首次导入模式:

import java.util.regex.Pattern;
Run Code Online (Sandbox Code Playgroud)

然后使用以下简单代码:

String s = "smith23";
if (Pattern.matches("[a-zA-Z]+",s)) { 
  // Do something
  System.out.println("Yes, string contains letters only");
}else{
  System.out.println("Nope, Other characters detected");    
}
Run Code Online (Sandbox Code Playgroud)

这将输出:

否,检测到其他字符