Как узнать, является ли первый символ строки числом?
В Java есть способ узнать, является ли первый символ строки числом?
Один из способов
string.startsWith("1")
и делать все это до 9, но это кажется очень неэффективным.
- Индикатор выполнения командной строки в Java
- swift Как удалить дополнительный строковый символ
- Как напечатать строку с нулевым завершением с помощью printf?
- Получить строку между двумя строками в строке
- Как я могу разделить строку с разделителем строк?
- Как объединить две строки в C?
- Вставка символа в определенном месте в строке
- Конкатенация строк с использованием оператора «+»
- Java - Лучший способ захватить ВСЕ строки между двумя строками? (регулярное выражение?)
- как заменить несколько строк в Oracle
- Как реализуется class StringBuilder? Внутренне ли он создает новые строковые объекты каждый раз, когда мы добавляем?
- Получить индекс шаблона в строке с использованием регулярного выражения
- Разделение строки на куски определенного размера
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(); } }