Как написать метод, чтобы определить, содержит ли данная строка число? Метод должен возвращать значение true, если строка содержит число и false в противном случае.
Проверка того, содержит ли String числовое значение в Java
Ответ 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) для извлечения числа из "удачной" подстроки...
Ответ 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)