在不使用正则表达式的情况下,判断字符是Java中的字母还是数字的最佳方法是什么?


125

在不使用正则表达式的情况下,识别string.charAt(index)是Java中的Az字母还是数字的最佳和/或最简单的方法是什么?谢谢。

Answers:


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

@CᴏɴᴏʀO'Bʀɪᴇɴ链接现在已固定。谢谢你让我知道。
亚当

12
使用Character.isLetterOrDigit(string.charAt(index))两者的验证。
Aspirant9

小心,isLetterOrDigit在提供真值方面比a-Z0-9还要多!请参阅此处的文档docs.oracle.com/javase/7/docs/api/java/lang/…–
fl0w

24

我正在寻找仅检查拉丁字母或十进制数字之一的函数。此后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
Stephen C

@StephenC你是对的。我忘记了我最终如何键入该字符而不是nbsp
Mr5

在Kotlin上要简单得多if (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
Vlad

23

如答案所示(如果您仔细检查了!),您的问题就模棱两可。“ Az字母”或数字是什么意思?

  • 如果您想知道字符是Unicode字母还是数字,请使用Character.isLetterCharacter.isDigit方法。

  • 如果您想知道一个字符是ASCII字母还是数字,那么最好的方法是比较字符范围“ a”至“ z”,“ A”至“ Z”以及“ 0”至'9'。

请注意,所有ASCII字母/数字都是Unicode字母/数字...但是,有许多不是ASCII的Unicode字母/数字字符。例如,重音字母,西里尔字母,梵语,...


通用的解决方案是这样做:

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

然后测试以查看该块是否是您感兴趣的块之一。在某些情况下,您将需要测试多个块。例如,西里尔字母(至少)有4个代码块,拉丁语有7个代码块。在Character.UnicodeBlock类定义公知的块静态常量; 参见javadocs

请注意,任何代码点最多只能包含一个块。




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))// ...
姚莉

OP明确要求if a string.charAt(index) is an A-z letter。所以我们不是在谈论其他语言吗?
vadasambar

例如,德语中的ä可以认为在az范围内。
罗伯特

4

比较其价值。它应该在“ a”和“ z”,“ A”和“ Z”,“ 0”和“ 9”的值之间


1
这种手动方法比内置方法更好Character.isLetter()吗?
IgorGanapolsky

1
@IgorGanapolsky-这完全取决于您要执行的操作。提示:他们做不同的事情!
斯蒂芬·C

@StephenC我认为Character.isLetter()是基本的。除非我们在谈论国际化?
IgorGanapolsky '16

1
@IgorGanapolsky-阅读javadocs。然后检查Unicode规范,以了解各个字符类实际包含的代码点。>>当然<<我们正在谈论国际化。Java中的字符均基于Unicode。
史蒂芬·C

你怎么做到这一点?
约翰·克特吉克


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


}
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.