Как проверить, начинается ли строка с числового номера? - PullRequest
44 голосов
/ 10 июля 2009

У меня есть строка, которая содержит буквенно-цифровой символ.

Мне нужно проверить, начинается ли строка с номера.

Спасибо

Ответы [ 6 ]

76 голосов
/ 10 июля 2009

См. isDigit(char ch) метод:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character.html

и передайте его первому символу строки, используя метод String.charAt().

Character.isDigit(myString.charAt(0));
17 голосов
/ 10 июля 2009

Извините, я не увидел ваш тег Java, читал только вопрос. Я все равно оставлю здесь свои ответы, поскольку набрал их.

Java

String myString = "9Hello World!";
if ( Character.isDigit(myString.charAt(0)) )
{
    System.out.println("String begins with a digit");
}

C ++

string myString = "2Hello World!";

if (isdigit( myString[0]) )
{
    printf("String begins with a digit");
}

Регулярное выражение :

\b[0-9]

Некоторые доказательства того, что мое регулярное выражение работает: Разве мои данные испытаний неверны? alt text

10 голосов
/ 10 июля 2009

Я думаю, вы должны использовать регулярное выражение:


import java.util.regex.*;

public class Test {
  public static void main(String[] args) {
    String neg = "-123abc";
    String pos = "123abc";
    String non = "abc123";
        /* I'm not sure if this regex is too verbose, but it should be
         * clear. It checks that the string starts with either a series
         * of one or more digits... OR a negative sign followed by 1 or
         * more digits. Anything can follow the digits. Update as you need
         * for things that should not follow the digits or for floating
         * point numbers.
         */
    Pattern pattern = Pattern.compile("^(\\d+.*|-\\d+.*)");
    Matcher matcher = pattern.matcher(neg);
    if(matcher.matches()) {
        System.out.println("matches negative number");
    }
    matcher = pattern.matcher(pos);
    if (matcher.matches()) {
        System.out.println("positive matches");
    }
    matcher = pattern.matcher(non);
    if (!matcher.matches()) {
        System.out.println("letters don't match :-)!!!");
    }
  }
}

Возможно, вы захотите настроить это, чтобы принимать числа с плавающей запятой, но это будет работать для негативов. Другие ответы не будут работать для негативов, потому что они проверяют только первый символ! Будьте более конкретны в своих потребностях, и я могу помочь вам скорректировать этот подход.

5 голосов
/ 10 июля 2009

Это должно работать:

String s = "123foo";
Character.isDigit(s.charAt(0));
1 голос
/ 10 июля 2009
System.out.println(Character.isDigit(mystring.charAt(0));

РЕДАКТИРОВАТЬ: я искал документы Java, посмотрел на методы в строковом классе, которые могут получить 1-й символ и посмотрел на методы в классе символов, чтобы увидеть, есть ли у него какой-либо метод для проверки такой вещи.

Я думаю, вы могли бы сделать то же самое, прежде чем спросить.

EDI2: Я имею в виду, пытайся что-то делать, читать / находить, а если ничего не можешь найти - спрашивай.
Я сделал ошибку при публикации в первый раз. isDigit - это статический метод класса Character.

0 голосов
/ 10 июля 2009

Используйте регулярное выражение типа ^\d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...