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

时间:2011-06-14 14:10:34

标签: java

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

8 个答案:

答案 0 :(得分:83)

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

答案 1 :(得分:30)

使用循环 -

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

    return false;
}

使用流 -

public static boolean containsDigit(final String aString)
{
    return aString != null && !aString.isEmpty() &&
            aString.chars().anyMatch(Character::isDigit);
}

答案 2 :(得分:5)

谢夫的答案不适合我。看起来他在String.contains()中使用了RegEx。如果您想使用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.*"));

答案 3 :(得分: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;
}

关于我能想象的最糟糕的代码,但可能还有其他人可以提出更糟糕的解决方案。

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

答案 4 :(得分:3)

您可以使用正则表达式来查明字符串是否包含数字。看一下matches()方法。

答案 5 :(得分:2)

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

Javadoc of Integer.parseInt(String obj)

答案 6 :(得分:1)

 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

答案 7 :(得分:-2)

另一种可能的解决方案是使用Scanner这样的对象:

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

当然,如果您正在寻找double,请使用hasNextDouble()方法(请参阅:Scanner javadoc