检查一个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; }
参考文献:
-
String#toCharArray
-
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 )