如何编写方法来查找给定字符串是否包含数字?如果字符串包含数字,则该方法应返回true,否则返回false。
答案 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)
从“幸运”子字符串中提取数字......
答案 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)