检查一个String是否包含Java中的一个数字值

我如何编写一个方法来查找给定的string是否包含一个数字? 如果string包含数字,则该方法应该返回true,否则返回false。

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

以前build议的解决scheme,这是行不通的,但由于@ Eng.Fouad的请求/build议带回。

不工作build议的解决scheme

 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")); 

工作解决scheme

 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 
 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; } 

参考文献:

  1. String#toCharArray
  2. Character#isDigit

Shef的答案不为我编译。 看起来他在String.contains()使用RegEx。 如果你想使用正则expression式使用这个:

 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.*")); 

看起来像人们喜欢做饭,所以我决定发布最糟糕的解决scheme,以一个简单的任务:

 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; } 

关于我能想象到的最糟糕的代码,但是在这里可能会有其他人可以提出更糟糕的解决scheme。

嗯,包含的数字更糟糕:

 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; } 

你可以使用正则expression式来判断string是否包含数字。 看看matches()方法。

你为什么不尝试写一个基于Integer.parseInt(String obj)的函数? 该函数可以接受作为参数您的string对象,然后标记string,并使用Integer.parseInt(String obj)从“幸运”子string中提取数字…

Integer.parseInt的Javadoc(String obj)

  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; 

当然也是functionisDigit

另一个可能的解决scheme是使用像这样的Scanner对象:

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

当然,如果你正在寻找一个double ,使用hasNextDouble()方法(请参阅: 扫描仪javadoc )