在Java中有没有办法找出字符串的第一个字符是否为数字?
一种方法是
string.startsWith("1")
并一直做到9点,但这似乎非常低效。
答案 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)
会抛出StringIndexOutOfBoundsException
。 startsWith
没有这个问题。
要使整个条件成一行并避免长度检查,您可以将正则表达式更改为以下内容:
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)
在秒,您可以检查第一个char
和return
的第一个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