В 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].*")
Если условие не отображается в сжатом цикле в вашей программе, небольшое повышение производительности для использования регулярных выражений вряд ли будет заметным.
Регулярные выражения - очень сильный, но дорогой инструмент. Действительно использовать их для проверки, является ли первый символ цифрой, но он не настолько изящный:) Я предпочитаю этот способ:
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();
}
}