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

时间:2009-08-03 15:41:50

标签: java string

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

一种方法是

string.startsWith("1")

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

6 个答案:

答案 0 :(得分:255)

Character.isDigit(string.charAt(0))

请注意this will allow any Unicode digit,而不只是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].*")

如果条件没有出现在程序的紧密循环中,则使用正则表达式的性能影响不大。

答案 1 :(得分:8)

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

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

答案 2 :(得分:1)

在KOTLIN中:

假设,您有一个String像这样:

private val phoneNumber="9121111111"

第一,您应该获得第一个:

val firstChar=phoneNumber.slice(0..0)

,您可以检查第一个charreturn的第一个Boolean

firstChar.isInt() // or isFloat()

答案 3 :(得分:0)

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");
}

答案 4 :(得分:0)

我刚刚遇到了这个问题,并考虑过使用不使用正则表达式的解决方案。

在我的情况下,我使用辅助方法:

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;
}

可能是一种矫枉过正,但我​​尽量避免使用正则表达式。

答案 5 :(得分:-1)

要验证仅首字母是数字或字符- 对于号码 Character.isDigit(str.charAt(0))-返回true

字符 Character.isLetter(str.charAt(0))-返回true