Как написать метод, чтобы определить, содержит ли данная строка число? Метод должен возвращать значение 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)