web-dev-qa-db-fra.com

Vérifier si String ne contient que des lettres

L'idée est de faire lire une chaîne et de vérifier qu'elle ne contient aucun caractère numérique. Donc, quelque chose comme "smith23" ne serait pas acceptable. 

70
kodie hill

Qu'est-ce que tu veux? Rapidité ou simplicité? Pour la vitesse, optez pour une approche basée sur la boucle. Pour plus de simplicité, optez pour une approche basée sur RegEx à une ligne.

La vitesse

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

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

    return true;
}

Simplicité

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

Java 8 expressions lambda. À la fois rapide et simple.

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

Ou, si vous utilisez Apache Commons, [StringUtils.isAlpha ()] .

32
Robby Pond

J'ai utilisé cette expression rationnelle (".*[a-zA-Z]+.*"). Avec l'instruction if not, cela évitera toutes les expressions qui ont une lettre avant, à la fin ou entre tout type de caractère.

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

Un rapide moyen de le faire est de:

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

Parce qu'il n'est pas nécessaire d'exécuter aString au complet pour vérifier si ce n'est pas un alpha String.

6
mark_infinite

Premier modèle d'importation:

import Java.util.regex.Pattern;

Ensuite, utilisez ce code simple:

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

Cela produira:

Non, autres personnages détectés

4
shalamus

Cochez ceci, je suppose que cela vous aide parce que cela fonctionne dans mon projet, donc une fois que vous vérifiez ce code

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

Manière plus rapide est ci-dessous. Considérant que les lettres sont seulement 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;
    }

Le temps d'exécution est calculé en nanosecondes. Cela peut varier d'un système à l'autre.

5748//bettertWay without numbers
true
89493 //isAlpha without  numbers
true
3284 //bettertWay with numbers
false
22989 //isAlpha with numbers
false
4
        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
        }
3
user3717716
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;
}

Je sais que c'est un peu encombré. Je l'utilisais avec mon programme et ressentais le désir de le partager avec les gens. Il peut dire si un caractère d'une chaîne n'est pas une lettre ou non. Utilisez-le si vous voulez quelque chose de facile à clarifier et à regarder en arrière.

3
LifesAway

Essayez d’utiliser des expressions régulières: String.matches

3
Brent Worden
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;
}
1
Surender Singh