文字列に文字のみが含まれているかどうかを確認します


81

文字列を読み取って、数字が含まれていないことを確認するという考え方です。したがって、「smith23」のようなものは受け入れられません。

回答:


139

なんでしょう?スピードかシンプルか?速度については、ループベースのアプローチを選択してください。簡単にするために、ワンライナーの正規表現ベースのアプローチを選択してください。

速度

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

15
私はここでペンダントかもしれませんが、「isLetter」は[a-zA-Z]と同じではありません
krosenvold 2013年

4
Javaでは、achar[]はUTF-16としてエンコードされることに注意してください。これは、を使用して個別に調べると、複数文字のグリフ(両方の文字が代理範囲内にある)が文字として認識されないことを意味しCharacter.isLetter(char)ます。(docs.oracle.com/javase/7/docs/api/java/lang/…を参照してください)代わりに、との組み合わせを使用する必要がString.codePointAt()ありCharacter.isLetter(int)ます。もちろん、文字列内の文字がASCIIまたは拡張された単一文字でエンコードされた範囲内にあることが確実にわかっている場合は、上記の答えが機能します。
イオノクラストブリガム2014

1
ラムダのアプローチはさらに簡単です。
IgorGanapolsky 2016年

1
@IgorGanapolskyにはAPI24以降が必要です。
MaihanNijat18年

RetroLambda使用@MaihanNijat
IgorGanapolsky



9

最初のインポートパターン:

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

この正規表現を使用しました(".*[a-zA-Z]+.*")if not声明それが最後で、または他の文字のいずれかのタイプの間で、前の手紙を持っているすべての式を避けることができます。

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

.*それの開始と終了時には正しくありません。任意の長さで数字を含める123smith123ことができるため、有効な名前になります。ただし、文字列内の1つの単語だけであれば、 `` ^ [a-zA-Z] + $ `のようなものは機能します。
Andris Leduskrasts 2015

私は間違った答えをしたと思います。あなたが正しいです。私のコードは、文字列に文字がないかどうかをチェックします。
iyas 2015

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ないかどうかを確認するために全体を実行する必要がないためです。


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

少し混雑していると思います。私は自分のプログラムでそれを使用していて、それを人々と共有したいという願望を感じました。文字列内の文字が文字ではないかどうかを判断できます。わかりやすく、振り返りやすいものが必要な場合に使用します。


4

より速い方法は以下の通りです。文字を考えるとaz、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

4

これを確認してください。私のプロジェクトで機能しているので、これが役立つと思います。このコードを確認したら

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

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
        }

4
これは、@ adarshrが3年前に投稿した「Simplicity」のより複雑なバージョンですか?
mabi 2014年


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

1
これは最初の文字のみをチェックします!だからA12341戻りtrueます。-1
jAC 2017年

@JanesAbouChleih、はい、あなたは正しかった。編集しました。今すぐ確認してください
Surender Singh 2017

反対票を削除しました。この答えは今は正しいですが、continueブロックを削除することで簡単に拡張できます。 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')) { return false; } } return true; }
jAC 2017

はい、
どうも

-1

StringUtils.isAlpha()メソッドを使用すると、作業が簡単になります。


1
これは、質問に対する別の解決策のコピーです。別のことをするためにそれを更新することを検討してください。
Frayal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.