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

Omn*_*ent 107 java string

在Java中有一种方法可以找出字符串的第一个字符是否为数字?

一种方法是

string.startsWith("1")
Run Code Online (Sandbox Code Playgroud)

并一直做到9点,但这似乎非常低效.

Mic*_*ers 258

Character.isDigit(string.charAt(0))
Run Code Online (Sandbox Code Playgroud)

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

char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');
Run Code Online (Sandbox Code Playgroud)

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

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

但是,使用这些方法中的任何一种,必须首先确保该字符串不为空.如果是,charAt(0)而且substring(0, 1)将引发StringIndexOutOfBoundsException.startsWith没有这个问题.

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

s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
Run Code Online (Sandbox Code Playgroud)

如果条件没有出现在程序的紧密循环中,那么使用正则表达式的性能影响不大可能会很明显.


Kir*_*rov 8

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

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

  • 1)`function`不是Java.2)这只允许阿拉伯数字,而不是中文,印度等.这可能是你喜欢的,但问题中没有说明.3)我在四年前的答案中已经涵盖了这个确切的解决方案. (11认同)