[英]Checking if a string contains only digits and then setting it only if it doesn't contain characters other than digits
/**
* Set the person's mobile phone number
*/
public void setMobile(String mobile) {
for (int i = 0; i < mobile.length(); i++) {
if (!Character.isDigit(mobile.charAt(i))) {}
}
this.mobile = mobile;
}
So I basically need to make sure the string only contains digits, and if it contains non-digits for the method just to do nothing. 因此,我基本上需要确保该字符串仅包含数字,并且如果该字符串包含非数字,则该方法什么也不做。 The problem I have is that if there is a random character in a string of numbers ie "034343a45645" it will still set the method. 我的问题是,如果一串数字中有一个随机字符,即“ 034343a45645”,它将仍然设置该方法。 Any help is appreciated thanks! 任何帮助表示赞赏,谢谢!
You could use String.matches(String regex)
: 您可以使用String.matches(String regex)
:
boolean onlyDigits = mobile.matches("[0-9]+");
With a for loop you can just break when a non-digits is found. 使用for循环,当发现非数字时,您可以中断。
boolean onlyDigits = true;
for (int i = 0; i < mobile.length(); i++) {
if (!Character.isDigit(mobile.charAt(i))) {
onlyDigits = false;
break;
}
}
Instead of breaking out of the loop, you could also just return. 除了打破循环,您还可以返回。 As it sounds like you don't want anything else to happen after. 听起来您不希望之后发生任何其他事情。 Thus eliminating the need for the onlyDigits
variable to begin with. 这样就消除了对onlyDigits
变量的需求。
Note that if mobile.length() == 0
then onlyDigits
would still be true
in relation to the above for loop. 请注意,如果mobile.length() == 0
则相对于上述for循环, onlyDigits
仍然为true
。 So assuming onlyDigits
should be false
if mobile
is an empty string, then you could initialize it as such: 因此,假设如果mobile
是一个空字符串,则onlyDigits
应该为false
,则可以这样初始化它:
boolean onlyDigits = !mobile.isEmpty()
After checking you can then assign it if onlyDigits
is true
. 检查后,如果onlyDigits
为true
,则可以分配它。
if (onlyDigits)
this.mobile = mobile;
You have two problems: 您有两个问题:
First: you didn't exit the loop if the if condition is false 第一:如果条件为假,则您没有退出循环
Second: why using loop try implement tryParse like this 第二:为什么要使用循环尝试像这样实现tryParse
boolean tryParseInt(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
if(tryParseInt(mobile)){
this.mobile = mobile;
}
add a boolean letterFound;
添加一个boolean letterFound;
then at your for loop 然后在你的for循环
whenever a letter is found use your else
statement to set letterFound
to true
每当找到字母时,请使用else
语句将letterFound
设置为true
then immediately stop the loop i=mobile.length()
at your else
statement 然后立即在您的else
语句中停止循环i=mobile.length()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.