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

Java 如何确定字符串的第一个字符是否为数字?,java,string,Java,String,在Java中,有没有一种方法可以确定字符串的第一个字符是否是数字 一种方法是 string.startsWith("1") 一直做到9点,但这似乎效率很低 Character.isDigit(string.charAt(0)) 注意,不仅仅是0-9。您可能更喜欢: char c = string.charAt(0); isDigit = (c >= '0' && c <= '9'); 但是,对于这些方法中的任何一种,您必须首先确保字符串不是空的。如果是,则cha

在Java中,有没有一种方法可以确定字符串的第一个字符是否是数字

一种方法是

string.startsWith("1")
一直做到9点,但这似乎效率很低

Character.isDigit(string.charAt(0))
注意,不仅仅是0-9。您可能更喜欢:

char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');
但是,对于这些方法中的任何一种,您必须首先确保字符串不是空的。如果是,则
charAt(0)
子字符串(0,1)
将抛出
StringIndexOutOfBoundsException
startsWith
没有此问题

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

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

如果这种情况在您的程序中没有出现,那么使用正则表达式对性能的影响不大。

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

regular expression starts with number->'^[0-9]' 
Pattern pattern = Pattern.compile('^[0-9]');
 Matcher matcher = pattern.matcher(String);

if(matcher.find()){

System.out.println("true");
}
public boolean isLeadingDigit(final String value){
    final char c = value.charAt(0);
    return (c >= '0' && c <= '9');
}
public boolean isLeadingDigit(最终字符串值){
最终字符c=值。字符(0);

return(c>='0'&&c我刚刚遇到这个问题,并考虑使用一个不使用正则表达式的解决方案

在我的例子中,我使用了一个助手方法:

public boolean notNumber(String input){
    boolean notNumber = false;
    try {
        // must not start with a number
        @SuppressWarnings("unused")
        double checker = Double.valueOf(input.substring(0,1));
    }
    catch (Exception e) {
        notNumber = true;           
    }
    return notNumber;
}

可能有点过分,但我尽量避免使用正则表达式。

在KOTLIN中:

假设您有一个
字符串,如下所示:

private val phoneNumber="9121111111"
在第一个
中,您应该得到第一个:

val firstChar=phoneNumber.slice(0..0)
第二个处,您可以检查
返回的第一个
字符

firstChar.isInt() // or isFloat()

仅验证第一个字母是否为数字或字符-- 为数 Character.isDigit(str.charAt(0))--返回true

为了性格
Character.isleter(str.charAt(0))--return true

我本想提到regex方法,但我担心如果我这样做了,您可能会尝试它。1)
函数
不是Java。2)这只允许使用阿拉伯数字,而不允许使用中文、印度等。这可能是您喜欢的,但问题中没有具体说明。3)我在四年前的回答中已经介绍了这个精确解。您不需要
{1,1}
后缀,这意味着“前面的模式必须出现1到1次”。这意味着与模式本身完全相同。此解决方案不起作用,因为String.matches和模式API尝试匹配完整的字符串,而不仅仅是第一个字符。re:“您必须首先确保字符串不是空的“-正确,更重要的是-您还必须确保它不为null,就好像所有显示的方法都会抛出异常一样。您可以直接检查(例如
((null!=s)&&Character.isDigit(s.charAt(0))
)或使用
Character.isDigit((s.s:“X”).charAt(0))之类的技巧
firstChar.isInt() // or isFloat()