Подтвердить что ты не робот

Проверка того, содержит ли String числовое значение в Java

Как написать метод, чтобы определить, содержит ли данная строка число? Метод должен возвращать значение true, если строка содержит число и false в противном случае.

4b9b3361

Ответ 1

if(str.matches(".*\\d.*")){
   // contains a number
} else{
   // does not contain a number
}

Предыдущее предлагаемое решение, которое не работает, но возвращено из-за запроса/предложения @Eng.Fouad.

Неработающее предложенное решение

String strWithNumber = "This string has a 1 number";
String strWithoutNumber = "This string does not have a number";

System.out.println(strWithNumber.contains("\d"));
System.out.println(strWithoutNumber.contains("\d"));

Рабочее решение

String strWithNumber = "This string has a 1 number";
if(strWithNumber.matches(".*\\d.*")){
    System.out.println("'"+strWithNumber+"' contains digit");
} else{
    System.out.println("'"+strWithNumber+"' does not contain a digit");
}

String strWithoutNumber = "This string does not have a number";
if(strWithoutNumber.matches(".*\\d.*")){
    System.out.println("'"+strWithoutNumber+"' contains digit");
} else{
    System.out.println("'"+strWithoutNumber+"' does not contain a digit");
}

Выход

'This string has a 1 number' contains digit
'This string does not have a number' does not contain a digit

Ответ 2

public static boolean containsDigit(final String s)
{
    if (s != null && !s.isEmpty())
    {
        for (char c : s.toCharArray())
        {
            if (Character.isDigit(c))
            {
                return true;
            }
        }
    }

    return false;
}

Литература:

Ответ 3

Ответ на шеф не компилируется для меня. Похоже, он использует RegEx в String.contains(). Если вы хотите использовать RegEx, используйте это:

String strWithNumber = "This string has a 1 number";
String strWithoutNumber = "This string has a number";

System.out.println(strWithNumber.matches(".*\\d.*"));
System.out.println(strWithoutNumber.matches(".*\\d.*"));

Ответ 4

Похоже, люди любят делать ложку, поэтому я решил опубликовать худшее решение для легкой задачи:

public static boolean isNumber(String s) throws Exception {
    boolean result = false;
    byte[] bytes = s.getBytes("ASCII");
    int tmp, i = bytes.length;
    while (i >0  && (result = ((tmp = bytes[--i] - '0') >= 0) && tmp <= 9));
    return result;
}

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

Hm, containsNumber хуже:

public static boolean containsNumber(String s) throws Exception {
    boolean result = false;
    byte[] bytes = s.getBytes("ASCII");
    int tmp, i = bytes.length;
    while (i >0  && (true | (result |= ((tmp = bytes[--i] - '0') >= 0) && tmp <= 9)));
    return result;
}

Ответ 5

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

Ответ 6

Почему вы не пытаетесь написать функцию на основе Integer.parseInt(String obj)? Функция может принимать в качестве параметра ваш объект String, а затем tokenize String и использовать Integer.parseInt(String obj) для извлечения числа из "удачной" подстроки...

Javadoc of Integer.parseInt(String obj)

Ответ 7

 try{
      Integer.parseInt(string);
      return true;
}catch (Exception  e){
      return false;
}

или вы можете сделать это самостоятельно:

 for ( int i = 0; i < string.length; ++i ) {
      if ( !( string[i] >= '0' || string[i] <= '9' ) )
           return false;
 }
 return true;

Конечно, также функция isDigit

Ответ 8

Другим возможным решением является использование объекта Scanner следующим образом:

Scanner scanner = new Scanner(inputString);  
if (scanner.hasNextInt()) {  
  return true;
}
else {
  return false
}

Конечно, если вы ищете double, используйте метод hasNextDouble() (см. Сканер javadoc)