В Java есть способ узнать, является ли первый символ строки числом?
Один из способов -
string.startsWith("1")
и проделайте то же самое до 9, но это кажется очень неэффективным.
В Java есть способ узнать, является ли первый символ строки числом?
Один из способов -
string.startsWith("1")
и проделайте то же самое до 9, но это кажется очень неэффективным.
Ответы:
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;
}
Наверное, излишество, но я стараюсь избегать регулярных выражений, когда могу.