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

Posted

技术标签:

【中文标题】在不使用正则表达式的情况下,判断一个字符是 Java 中的字母还是数字的最佳方法是啥?【英文标题】:What is the best way to tell if a character is a letter or number in Java without using regexes?在不使用正则表达式的情况下,判断一个字符是 Java 中的字母还是数字的最佳方法是什么? 【发布时间】:2011-05-02 03:50:29 【问题描述】:

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

【问题讨论】:

【参考方案1】:

使用下面的代码

Character.isLetterOrDigit(string.charAt(index))

【讨论】:

您的答案添加了哪些之前的答案未涵盖的内容? 小心,isLetterOrDigit 比 a-Z0-9 更准确!!!请参阅此处的文档docs.oracle.com/javase/7/docs/api/java/lang/… 罗伯特,你当然可以只调用一个函数,而不是调用两个函数。【参考方案2】:

正如答案所示(如果您仔细检查它们!),您的问题是模棱两可的。 “A-z 字母”或数字是什么意思?

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

如果您想知道一个字符是 ASCII 字母还是数字,那么最好的办法是通过比较字符范围 'a' 到 'z' 来进行测试, 'A' 到 'Z' 和 '0' 到 '9'。

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


一般的解决办法是这样做:

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

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

请注意,任何代码点最多位于一个块中。

【讨论】:

【参考方案3】:

Character.isDigit(string.charAt(index)) (JavaDoc) 如果是数字则返回 trueCharacter.isLetter(string.charAt(index)) (JavaDoc) 如果是字母则返回 true

【讨论】:

注意:这些会告诉您字符是否为 Unicode 字母/数字。 OP 要求“一个 A-z 字母”……不管这意味着什么。 为什么 ASCII ├ (255 ) 在我的情况下会通过?我以为它只适用于 a-z、A-Z 和 0-9? @CᴏɴᴏʀO'Bʀɪᴇɴ 链接现已修复。谢谢你告诉我。 使用Character.isLetterOrDigit(string.charAt(index)) 进行两个验证。 小心,isLetterOrDigit 比 a-Z0-9 更准确!!!请参阅此处的文档docs.oracle.com/javase/7/docs/api/java/lang/…【参考方案4】:
 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");




【讨论】:

【参考方案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

【讨论】:

前面的代码是错误的,因为它只适用于英语和其他几种语言。要将前面的示例国际化,请将其替换为以下语句: 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。所以我们不是在谈论其他语言吗? 在例如德语中,可以认为 ä 在 a-z 范围内。【参考方案6】:

我正在寻找一个只检查它是拉丁字母还是十进制数字的函数。从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');

【讨论】:

刚刚浏览了我们的代码,并惊讶于 isLetter 和 isLetterOrDigit 存在多少错误...谢谢! 不知何故,您的字符集和/或显示字体混淆了。 Unicode 代码点 u00ff 实际上是字符 ÿ。 (带有变音符号的小写 y。)表示 ├ 的代码点是 u251c @StephenC 你是对的。我忘了我最终是如何输入那个字符而不是nbsp 在 Kotlin 上要简单得多 if (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')【参考方案7】:

Java Character 类从 1.0.2 版本开始有一个 isLetterOrDigit 方法

【讨论】:

小心,isLetterOrDigit 比 a-Z0-9 更准确!!!请参阅此处的文档docs.oracle.com/javase/7/docs/api/java/lang/…【参考方案8】:

我不知道最好,但这对我来说似乎很简单:

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

【讨论】:

小心,isLetterOrDigit 比 a-Z0-9 更准确!!!请参阅此处的文档docs.oracle.com/javase/7/docs/api/java/lang/…【参考方案9】:

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

【讨论】:

这种手动方式比内置的Character.isLetter()方式好用吗? @IgorGanapolsky - 这完全取决于你想要做什么。提示:他们做不同的事情! @StephenC 我认为Character.isLetter() 是初级的。除非我们在谈论国际化? @IgorGanapolsky - 阅读 javadocs。然后检查 Unicode 规范,了解各个字符类实际包含的代码点。 >>当然 你是怎么做到的?

以上是关于在不使用正则表达式的情况下,判断一个字符是 Java 中的字母还是数字的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不编写正则表达式的情况下从字符串中解析日期?

在不使用正则表达式的情况下,在NSString中计算单词数量的最有效方法是什么?

如何在不重新加载的情况下修改 URL 查询字符串

我可以在不抛出异常的情况下测试正则表达式在 C# 中是不是有效吗

unix:如何判断字符串是否与正则表达式匹配

正则表达式