Answers:
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)
将引发StringIndexOutOfBoundsException
。startsWith
没有这个问题。
要使整个条件只占一行,并避免长度检查,可以将正则表达式更改为以下内容:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
如果条件没有出现在程序的紧密循环中,则使用正则表达式对性能的影响很小。
((null!=s) && Character.isDigit(s.charAt(0)) )
)或使用类似的技巧Character.isDigit((s?s:"X").charAt(0))
正则表达式是非常强大但昂贵的工具。使用它们来检查第一个字符是否为数字是有效的,但是它不是那么优雅:)我更喜欢这种方式:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
function
不是Java。2)这仅允许使用阿拉伯数字,而不允许中文,印度等。这可能是您喜欢的,但未在问题中指定。3)四年前,我已经在我的回答中介绍了这个确切的解决方案。
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");
}
{1,1}
后缀,这意味着“前面的模式必须出现1到1次”。这意味着与模式本身完全相同。
我只是碰到了这个问题,并考虑过提供一个不使用正则表达式的解决方案。
就我而言,我使用辅助方法:
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;
}
可能是一个过大的杀伤力,但我会尽量避免使用正则表达式。