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

Dan*_*pel 98 java

如果string.charAt(index)是Java中的Az字母或数字而不使用正则表达式,最好和/或最简单的方法是什么?谢谢.

Ada*_*dam 204

Character.isDigit(string.charAt(index))(JavaDoc的),如果它是一个数字将返回true
Character.isLetter(string.charAt(index))(JavaDoc的)将返回true,如果它是一个字母

  • 注意:这些字符会告诉您字符是否为Unicode字母/数字.OP要求"Az字母"......无论那意味着什么. (10认同)
  • 对于两个验证都使用`CHARaret.isLetterOrDigit(string.charAt(index))`. (9认同)
  • 为什么 ASCII ├ (255 ) 在我的情况下通过?我以为它只适用于 az、AZ 和 0-9? (4认同)
  • 小心, isLetterOrDigit 比 a-Z0-9 更能给出 true !请参阅此处的文档https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isLetterOrDigit(char) (3认同)

Ste*_*n C 21

如答案所示(如果你仔细检查它们),你的问题就不明确了.你是什​​么意思"阿兹字母"或数字?

  • 如果您想知道某个字符是否为Unicode字母或数字,请使用Character.isLetterCharacter.isDigit方法.

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

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


一般的解决方案是这样做:

Character.UnicodeBlock block = Character.UnicodeBlock.of(someCodePoint);
Run Code Online (Sandbox Code Playgroud)

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

请注意,任何代码点最多都在一个块中.


mr5*_*mr5 18

我正在寻找一个只检查拉丁字母或十进制数字之一的函数.因为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');
}
Run Code Online (Sandbox Code Playgroud)

  • 刚刚浏览了我们的代码,很惊讶其中有这么多错误是因为 isLetter 和 isLetterOrDigit...谢谢! (2认同)
  • 不知何故,你的字符集和/或显示字体混淆了。Unicode 代码点“u00ff”实际上是字符 ÿ。(小写 y 带变音符号。)表示 ├ 的代码点是 `u251c`。 (2认同)
  • 在 Kotlin 上,它更简单 `if (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')` (2认同)

Chu*_*cks 11

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


小智 9

使用下面的代码

Character.isLetterOrDigit(string.charAt(index))

  • 您的答案添加了哪些先前答案中未涵盖的内容? (2认同)

Cam*_*ron 7

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

Character.isDigit(str.charAt(index))
Character.isLetter(str.charAt(index))
Run Code Online (Sandbox Code Playgroud)


Yup*_*ing 5

比较一下它的价值。它应该介于“a”和“z”、“A”和“Z”、“0”和“9”之间


vad*_*bar 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'))
    // ...
Run Code Online (Sandbox Code Playgroud)

来源:https : //docs.oracle.com/javase/tutorial/i18n/text/charintro.html