在Java中,不使用正则表达式,最好的方法是如何判断一个字符是字母还是数字?

199

在Java中,不使用正则表达式,最好或最简单的方法是什么,可以识别一个字符串.charAt(index)是否为A-z字母或数字?谢谢。

9个回答

369

Character.isDigit(string.charAt(index)) (JavaDoc) 会在字符为数字时返回 true。
Character.isLetter(string.charAt(index)) (JavaDoc) 会在字符为字母时返回 true。


18
请注意,这些指示告诉您字符是否是Unicode字母/数字。原帖子要求“A-z字母”,但这意味着什么并不清楚。 - Stephen C
5
为什么 ASCII 中的 ├ (255) 在我的情况下通过了?我认为它只能匹配小写字母a-z、大写字母A-Z和数字0-9? - mr5
@CᴏɴᴏʀO'Bʀɪᴇɴ 链接已修复。感谢您通知我。 - Adam
22
在两个验证中都使用 Character.isLetterOrDigit(string.charAt(index)) - Aspirant9
3
注意,isLetterOrDigit在远超a-Z0-9范围内也会返回true!!!请参考此处的文档:https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isLetterOrDigit(char)。 - fl0w

37

我正在寻找一个函数,它只检查是否为拉丁字母或者十进制数字。由于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');
}

2
刚刚检查了我们的代码,惊讶地发现由于isLetter和isLetterOrDigit有多少个bug...谢谢! - fl0w
2
你的字符集和/或显示字体混淆了。Unicode代码点u00ff实际上是字符ÿ(带分音符的小写y)。代表├的代码点是u251c - Stephen C
@StephenC 你说得对。我忘记了我是怎么输入那个字符而不是 [nbsp](https://theasciicode.com.ar/extended-ascii-code/non-breaking-space-no-break-space-ascii-code-255.html)。 - mr5
2
在 Kotlin 中,它更简单:if (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9') - Vlad

31

正如答案所示(如果您仔细查看它们!),您的问题存在歧义。您所说的“A-z字母”或数字是什么意思?

  • 如果您想知道一个字符是否为 Unicode 字母或数字,则使用 Character.isLetter Character.isDigit 方法。

  • 如果您想知道一个字符是否为 ASCII 字母或数字,则最好的方法是通过与字符范围'a'到'z','A'到'Z'和'0'进行比较来进行测试'到'9'。

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


通用解决方案是这样做:

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

然后测试一下这个代码块是否是你感兴趣的代码块之一。在某些情况下,您需要测试多个代码块。例如, Cyrillic 字符至少有 4 个代码块,而拉丁字符则有 7 个代码块。 Character.UnicodeBlock 类为知名的代码块定义了静态常量;请参阅javadocs

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


17

1
小心,isLetterOrDigit在远超a-Z0-9的情况下也会返回true!!!请参考此处的文档:https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isLetterOrDigit(char) - fl0w

12

我不知道最好的方法是什么,但这个看起来对我来说相当简单:

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

小心,isLetterOrDigit在远远超出a-Z0-9的范围内也会返回true!!! 请参考此处的文档 https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isLetterOrDigit(char) - fl0w

9
使用以下代码:

Character.isLetterOrDigit(string.charAt(index))

该代码用于判断字符串中指定索引位置的字符是否为字母或数字。

2
你的回答有哪些新内容,之前的回答没有提到的? - Robert
1
小心,isLetterOrDigit在远远超出a-Z0-9的范围内也会返回true!!! 请参考此处的文档 https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isLetterOrDigit(char) - fl0w
Robert,你可以只调用一个函数,而不是调用两个函数。 - sheikh

8
// 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

本教程介绍了 Java 中的字符编码和 Unicode。Unicode 是一种标准,用于在计算机上表示所有语言的字符。Java 使用 Unicode 字符集来表示字符和字符串。本教程还讨论了 Java 中的文本排序和格式化,以及如何使用不同的字符集进行输入和输出。


1
上述代码是错误的,因为它只适用于英语和其他少数语言。为了国际化前面的示例,请将其替换为以下语句: char ch; // ...// 这段代码没问题!if (Character.isLetter(ch)) // ...if (Character.isDigit(ch)) // ...if (Character.isSpaceChar(ch)) // ... - Yao Li
OP 明确询问“如果 string.charAt(index) 是 A-z 字母”。所以我们不是在谈论其他语言,对吧? - vadasambar
例如,在德语中,ä 可以被认为是 a-z 范围内的字符。 - Robert

5

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


1
这种手动方法比内置的Character.isLetter()方法更好吗? - IgorGanapolsky
1
@IgorGanapolsky - 这取决于你想要做什么。提示:它们执行不同的操作! - Stephen C
@StephenC 我认为Character.isLetter()是基础的。除非我们在谈论国际化? - IgorGanapolsky
1
@IgorGanapolsky - 请阅读Java文档。然后检查Unicode规范,了解相应字符类实际包含哪些代码点。>>当然<<,我们正在谈论国际化。Java中的字符都是基于Unicode的。 - Stephen C
你怎么做这个? - john k

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


}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接