正規表現を使用せずに文字がJavaの文字または数字であるかどうかを確認する最良の方法は何ですか?


125

正規表現を使用せずに、string.charAt(index)がJavaのAz文字または数値であるかどうかを認識するための最良および/または最も簡単な方法は何ですか?ありがとう。

回答:


241

Character.isDigit(string.charAt(index))JavaDoc)数字の場合はtrueを返します
Character.isLetter(string.charAt(index))JavaDoc)が文字の場合はtrueを返します


13
注:これらは、文字がUnicode文字/数字であるかどうかを通知します。OPは「Azレター」を要求しました...意味が何であれ。
スティーブンC

4
私の場合、ASCII├(255)が渡されるのはなぜですか?私はそれをaz、AZ、0-9だけに考えましたか?
mr5 2015

@CᴏɴᴏʀO'Bʀɪᴇɴリンクが修正されました。知らせてくれてありがとうございます。
アダム

12
Character.isLetterOrDigit(string.charAt(index))両方の検証に使用します。
Aspirant9 2017

注意してください、isLetterOrDigitはa-Z0-9よりもはるかに優れています!!! ここでのドキュメントを参照してくださいdocs.oracle.com/javase/7/docs/api/java/lang/...
fl0w

24

ラテン文字か10進数かをチェックする関数を探しています。以降char c = 255、これは印刷可能なバージョンでは├であり、によるレターと見なされCharacter.isLetter(c)ます。この機能は、ほとんどの開発者が探しているものだと思います。

private static boolean isLetterOrDigit(char c) {
    return (c >= 'a' && c <= 'z') ||
           (c >= 'A' && c <= 'Z') ||
           (c >= '0' && c <= '9');
}

1
isLetterとisLetterOrDigitが原因でコードがいくつバグに驚かされたのでしょうか。ありがとうございます。
fl0w

1
どういうわけか、あなたはあなたのキャラクターセットとディスプレイフォントを混同してしまいました。Unicodeコードポイントu00ffは実際には文字ÿです。(ウムラウト付きの小文字のy。)├を表すコードポイントはu251cです。
スティーブンC

@StephenCあなたは正しい。nbspの
mr5

Kotlinのほうがはるかに簡単ですif (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
Vlad

23

回答が示すように(慎重に検討すると)、質問は曖昧です。「Azの文字」または数字とはどういう意味ですか?

  • 文字がUnicode文字または数字かどうかを知りたい場合は、Character.isLetterおよびCharacter.isDigitメソッドを使用します。

  • 文字がASCII文字または数字かどうかを知りたい場合は、「a」から「z」、「A」から「Z」、「0」から「0」までの文字範囲と比較してテストするのが最善の方法です。 「9」。

すべてのASCII文字/数字はUnicode文字/数字ですが、ASCII以外のUnicode文字/数字が多数あることに注意してください。たとえば、アクセント付き文字、キリル文字、サンスクリットなど...


一般的な解決策はこれを行うことです:

Character.UnicodeBlock block = Character.UnicodeBlock.of(someCodePoint);

次に、ブロックが目的のブロックの1つであるかどうかをテストします。場合によっては、複数のブロックをテストする必要があります。たとえば、キリル文字には(少なくとも)4つのコードブロックがあり、ラテン語には7つのコードブロックがあります。このCharacter.UnicodeBlockクラスは、既知のブロックの静的定数を定義します。javadocsを参照してください。

コードポイントは最大で 1つのブロック内にあることに注意してください。



8

私は最善については知りませんが、これは私にはかなり簡単に見えます:

Character.isDigit(str.charAt(index))
Character.isLetter(str.charAt(index))

注意してください、isLetterOrDigitはa-Z0-9よりもはるかに優れています!!! ここでのドキュメントを参照してくださいdocs.oracle.com/javase/7/docs/api/java/lang/...
fl0w

5
// check if ch is a letter
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
    // ...

// check if ch is a digit
if (ch >= '0' && ch <= '9')
    // ...

// check if ch is a whitespace
if ((ch == ' ') || (ch =='\n') || (ch == '\t'))
    // ...

ソース:https : //docs.oracle.com/javase/tutorial/i18n/text/charintro.html


1
上記のコードは英語と他のいくつかの言語でのみ機能するため、誤りです。前の例を国際化するには、次のステートメントで置き換えます。char ch; // ... //このコードは問題ありません!if(Character.isLetter(ch))// ... if(Character.isDigit(ch))// ... if(Character.isSpaceChar(ch))// ...
Yao Li

OPは明確に尋ねたif a string.charAt(index) is an A-z letter。だから私たちは他の言語について話していませんか?
vadasambar 2017

たとえばドイツ語では、äはa〜zの範囲にあると見なすことができます。
ロバート

4

その値を比較します。「a」と「z」、「A」と「Z」、「0」と「9」の値の間にある必要があります


1
この手動のアプローチは組み込みのCharacter.isLetter()方法よりも優れていますか?
IgorGanapolsky 2015

1
@IgorGanapolsky-それはあなたが何をしようとしているのかによります。ヒント:彼らは異なることをします!
スティーブンC

@StephenC Character.isLetter()は初歩的だと思いました。国際化について話しているのでなければ、
IgorGanapolsky 2016

1
@IgorGanapolsky-javadocsをお読みください。次に、Unicode仕様をチェックして、それぞれの文字クラスに実際に含まれているコードポイントを確認します。>>もちろん<<我々は国際化について話している。Javaの文字はすべてUnicodeベースです。
スティーブンC

これどうやってやるの?
john ktejik 2018

3

以下のコードを使用してください

Character.isLetterOrDigit(string.charAt(index))


1
あなたの答えは、以前の答えでカバーされていなかったものを追加しますか?
ロバート

注意してください、isLetterOrDigitはa-Z0-9よりもはるかに優れています!!! ここでのドキュメントを参照してくださいdocs.oracle.com/javase/7/docs/api/java/lang/...
fl0w

ロバート、2つの関数を呼び出す代わりに、もちろん1つの関数だけを呼び出すことができます。
シェイク

0
 import java.util.Scanner;
 public class v{
 public static void main(String args[]){
 Scanner in=new Scanner(System.in);
    String str;
    int l;
    int flag=0;
    System.out.println("Enter the String:");
    str=in.nextLine();
    str=str.toLowerCase();
    str=str.replaceAll("\\s","");
    char[] ch=str.toCharArray();
    l=str.length();
    for(int i=0;i<l;i++){
        if ((ch[i] >= 'a' && ch[i]<= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z')){
        flag=0;
        }
        else

        flag++;
        break;
        } 
if(flag==0)
    System.out.println("Onlt char");


}
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.