Как узнать, является ли первый символ строки числом?

В 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].*") 

Если условие не отображается в жесткой петле в вашей программе, небольшое повышение производительности для использования регулярных выражений вряд ли будет заметным.

Регулярные выражения – очень сильный, но дорогостоящий инструмент. Действительно использовать их для проверки того, является ли первый символ цифрой, но это не так элегантно 🙂 Я предпочитаю этот способ:

 public boolean isLeadingDigit(final String value){ final char c = value.charAt(0); return (c >= '0' && c <= '9'); } 
 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"); } 

Я только наткнулся на этот вопрос и подумал о том, чтобы помочь с решением, которое не использует регулярное выражение.

В моем случае я использую вспомогательный метод:

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

Вероятно, избыток, но я стараюсь избегать регулярного выражения, когда только могу.

Попробуйте этот код поможет вам 🙂

 import java.io.*; public class findDigit { public findDigit() { String line = "1Hello"; String firstLetter = String.valueOf(line.charAt(0)); //line had 0 to 5 string index char first = firstLetter.charAt(0); /* if (Character.isLetter(first)) //for alphabets if (Character.isSpaceChar(first)) //for spaces */ if (Character.isDigit(first)) // for Digits { int number = Integer.parseInt(firstLetter); System.out.println("This String has digit at first as: "+number); } else { System.out.println("This String has alphabet at first as: "+firstLetter); } } public static void main(String args[]) { new findDigit(); } } 
  • Манипуляция строкой запроса в Java
  • Что плохого в создании XML с конкатенацией строк?
  • C #: как получить первый символ строки?
  • C # Разделение строк?
  • Преобразование строки в дату на C ++
  • Строки Java: «String s = новая строка (« глупо »);
  • Как динамически создавать переменные в Java?
  • Как преобразовать String в long в Java?
  • Как имитировать поведение автоматической пересылки стека
  • Проверить, что точка (x, y) находится между двумя точками, нарисованными по прямой
  • Преобразование строкового представления списка в список
  • Давайте будем гением компьютера.