Проверьте, содержит ли строка только буквы - PullRequest
71 голосов
/ 09 марта 2011

Идея состоит в том, чтобы прочитать строку и убедиться, что она не содержит числовых символов. Так что что-то вроде «smith23» было бы неприемлемо.

Ответы [ 14 ]

129 голосов
/ 09 марта 2011

Что ты хочешь?Скорость или простота?Для скорости, пойти на подход, основанный на петле.Для простоты воспользуйтесь подходом, основанным на правилах 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]+");
}
57 голосов
/ 24 апреля 2015

Java 8 лямбда-выражений.И быстро, и просто.

boolean allLetters = someString.chars().allMatch(Character::isLetter);
33 голосов
/ 09 марта 2011

Или, если вы используете Apache Commons, [StringUtils.isAlpha ()] .

6 голосов
/ 06 июля 2015

Я использовал это регулярное выражение (".*[a-zA-Z]+.*"). С оператором if not он будет избегать всех выражений, которые имеют буквы до, в конце или между любыми другими символами.

String strWithLetters = "123AZ456";
if(! Pattern.matches(".*[a-zA-Z]+.*", str1))
 return true;
else return false
6 голосов
/ 24 апреля 2015

A быстрый способ сделать это:

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, чтобы проверить, не является ли он альфа-строка .

4 голосов
/ 10 сентября 2018

Первый шаблон импорта:

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

Будет выведено:

Нет, обнаружены другие символы

4 голосов
/ 23 июня 2016

Проверьте это, я думаю, это поможет вам, потому что это работает в моем проекте, поэтому, как только вы проверите этот код

if(! Pattern.matches(".*[a-zA-Z]+.*[a-zA-Z]", str1))
 {
   String not contain only character;
 }
else 
{
  String contain only character;
}
4 голосов
/ 20 апреля 2016

Более быстрый путь ниже.Учитывая, что буквы только аз, AZ.

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
3 голосов
/ 07 июня 2014
        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 голосов
/ 27 октября 2013
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;
}

Я знаю, что здесь немного людно. Я использовал это с моей программой и чувствовал желание поделиться этим с людьми. Он может сказать, является ли какой-либо символ в строке буквой или нет. Используйте его, если хотите что-то легко прояснить и оглянуться назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...