У 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;
}
Можливо, зайвий набір, але я намагаюся уникати регулярних виразів, коли можу.