检查String是否仅包含字母

时间:2011-03-08 21:22:22

标签: java string

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

18 个答案:

答案 0 :(得分:128)

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

<强>速度

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

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

    return true;
}

<强>简单

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

答案 1 :(得分:55)

Java 8 lambda表达式。快速而简单。

boolean allLetters = someString.chars().allMatch(Character::isLetter);

答案 2 :(得分:32)

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

答案 3 :(得分: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;
}

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

答案 4 :(得分:6)

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

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

答案 5 :(得分:4)

第一个导入模式:

import java.util.regex.Pattern;

然后使用以下简单代码:

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");    
}

这将输出:

  

没有,检测到其他字符

答案 6 :(得分:4)

检查一下,我想这对你有帮助,因为它在我的项目中有效,所以一旦你检查这段代码

if(! Pattern.matches(".*[a-zA-Z]+.*[a-zA-Z]", str1))
 {
   String not contain only character;
 }
else 
{
  String contain only character;
}

答案 7 :(得分:4)

更快的方法如下。考虑字母只是a-z,A-Z。

public static void main( String[] args ){ 
        System.out.println(bestWay("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
        System.out.println(isAlpha("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));

        System.out.println(bestWay("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
        System.out.println(isAlpha("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
    }

    public static boolean bettertWay(String name) {
        char[] chars = name.toCharArray();
        long startTimeOne = System.nanoTime();
        for(char c : chars){
            if(!(c>=65 && c<=90)&&!(c>=97 && c<=122) ){
                System.out.println(System.nanoTime() - startTimeOne);
                    return false;
            }
        }
        System.out.println(System.nanoTime() - startTimeOne);
        return true;
    }


    public static boolean isAlpha(String name) {
        char[] chars = name.toCharArray();
        long startTimeOne = System.nanoTime();
        for (char c : chars) {
            if(!Character.isLetter(c)) {
                System.out.println(System.nanoTime() - startTimeOne);
                return false;
            }
        }
        System.out.println(System.nanoTime() - startTimeOne);
        return true;
    }

运行时间以纳秒计算。它可能因系统而异。

5748//bettertWay without numbers
true
89493 //isAlpha without  numbers
true
3284 //bettertWay with numbers
false
22989 //isAlpha with numbers
false

答案 8 :(得分:3)

尝试使用正则表达式:String.matches

答案 9 :(得分:3)

        String expression = "^[a-zA-Z]*$";
        CharSequence inputStr = str;
        Pattern pattern = Pattern.compile(expression);
        Matcher matcher = pattern.matcher(inputStr);
        if(matcher.matches())
        {
              //if pattern matches 
        }
        else
        {
             //if pattern does not matches
        }

答案 10 :(得分:3)

private boolean isOnlyLetters(String s){
    char c=' ';
    boolean isGood=false, safe=isGood;
    int failCount=0;
    for(int i=0;i<s.length();i++){
        c = s.charAt(i);
        if(Character.isLetter(c))
            isGood=true;
        else{
            isGood=false;
            failCount+=1;
        }
    }
    if(failCount==0 && s.length()>0)
        safe=true;
    else
        safe=false;
    return safe;
}

我知道它有点拥挤。我正在使用它与我的程序,并感到与人分享它的愿望。它可以判断字符串中的任何字符是否不是字母。如果你想要一些易于澄清和回顾的东西,请使用它。

答案 11 :(得分:1)

public boolean isAlpha(String name)
{
    String s=name.toLowerCase();
    for(int i=0; i<s.length();i++)
    {
        if((s.charAt(i)>='a' && s.charAt(i)<='z'))
        {
            continue;
        }
        else
        {
           return false;
        }
    }
    return true;
}

答案 12 :(得分:0)

虽然有很多方法可以给这只猫剥皮,但我更喜欢将这些代码包装到可重用的扩展方法中,这样以后的工作就变得微不足道了。使用扩展方法时,您还可以避免使用 RegEx,因为它比直接字符检查慢。我喜欢使用 Extensions.cs NuGet 包中的扩展。它使这项检查变得如此简单:

  1. https://www.nuget.org/packages/Extensions.cs 包添加到您的项目中。
  2. 在代码顶部添加“using Extensions;”。
  3. "smith23".IsAlphabetic() 将返回 False 而 "john smith".IsAlphabetic() 将返回 True。默认情况下,.IsAlphabetic() 方法会忽略空格,但它也可以被覆盖,这样 "john smith".IsAlphabetic(false) 将返回 False,因为空格不被视为字母表的一部分。
  4. 其余代码中的所有其他检查都只是MyString.IsAlphabetic()

答案 13 :(得分:0)

感觉好像我们需要的是找出字符是否只是字母。 这是您可以解决的方法-

Character.isAlphabet(int(c)) 

有助于检查字符串的字符是否为字母。 其中 c 是

s.charAt(elementIndex)

答案 14 :(得分:0)

如果只允许使用 ASCII 字母,可以使用字符类 \p{Alpha}。 (这相当于 [\p{Lower}\p{Upper}][a-zA-Z]。)

boolean allLettersASCII = str.matches("\\p{Alpha}*");

要允许所有 Unicode 字母,请使用字符类 \p{L}(或等效的 \p{IsL})。

boolean allLettersUnicode = str.matches("\\p{L}*");

参见Pattern documentation

答案 15 :(得分:0)

我找到了一种简单的方法来检查一个字符串的所有数字是否都是字母。

public static boolean isStringLetter(String input) {

    boolean b = false;
    for (int id = 0; id < input.length(); id++) {
        if ('a' <= input.charAt(id) && input.charAt(id) <= 'z') {
            b = true;
        } else if ('A' <= input.charAt(id) && input.charAt(id) <= 'Z') {
            b = true;
        } else {
            b = false;
        }
    }
    return b;
}

我希望它可以帮助任何正在寻找这种方法的人。

答案 16 :(得分:-1)

使用StringUtils.isAlpha()方法,它将使您的生活变得简单。

答案 17 :(得分:-1)

解决方案::我更喜欢使用一个简单的循环。

public static boolean isAlpha(String s) {
    if (s == null || s.length() == 0) {
        return false;
    }

    char[] chars = s.toCharArray();
    for (int index = 0; index < chars.length; index++) {
        int codePoint = Character.codePointAt(chars, index);
        if (!Character.isLetter(codePoint)) {
            return false;
        }
    }

    return true;
}