如何确定字符串的第一个字符是否为数字?

2022-08-31 09:32:59

在Java中,有没有办法找出字符串的第一个字符是否是数字?

一种方法是

string.startsWith("1")

并一直做上述工作,直到9点,但这似乎非常低效。


答案 1
Character.isDigit(string.charAt(0))

请注意,这将允许任何 Unicode 数字,而不仅仅是 0-9。您可能更喜欢:

char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');

或者较慢的正则表达式解决方案:

s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")

但是,对于这些方法中的任何一种,您都必须首先确保字符串不为空。如果是,并且将抛出一个 . 没有这个问题。charAt(0)substring(0, 1)StringIndexOutOfBoundsExceptionstartsWith

要使整个条件成为一行并避免长度检查,可以将正则表达式更改为以下内容:

s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")

如果条件未出现在程序中的紧密循环中,则使用正则表达式对性能的小影响不太可能很明显。


答案 2

正则表达式是非常强大但昂贵的工具。使用它们来检查第一个字符是否为数字是有效的,但它并不那么优雅:)我更喜欢这种方式:

public boolean isLeadingDigit(final String value){
    final char c = value.charAt(0);
    return (c >= '0' && c <= '9');
}