/**
* 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;
}
所以我基本上需要确保字符串只包含数字,如果它包含方法的非数字只是为了什么都不做。 我遇到的问题是,如果一串数字中有一个随机字符,即“034343a45645”,它仍然会设置该方法。 感谢任何帮助!
答案 0 :(得分:1)
您可以使用String.matches(String regex)
:
boolean onlyDigits = mobile.matches("[0-9]+");
使用for循环,您可以在找到非数字时中断。
boolean onlyDigits = true;
for (int i = 0; i < mobile.length(); i++) {
if (!Character.isDigit(mobile.charAt(i))) {
onlyDigits = false;
break;
}
}
您也可以返回,而不是打破循环。听起来你不希望发生任何其他事情。因此,无需开始onlyDigits
变量。
请注意,如果mobile.length() == 0
,那么onlyDigits
对于上述for循环仍然是true
。因此,如果onlyDigits
是false
,如果mobile
是空字符串,那么您可以将其初始化为:
boolean onlyDigits = !mobile.isEmpty()
检查完毕后,如果onlyDigits
为true
,则可以进行分配。
if (onlyDigits)
this.mobile = mobile;
答案 1 :(得分:1)
你有两个问题:
首先:如果if条件为假,则没有退出循环
第二:为什么使用循环尝试实现像这样的tryParse
boolean tryParseInt(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
if(tryParseInt(mobile)){
this.mobile = mobile;
}
答案 2 :(得分:0)
添加boolean letterFound;
然后在你的for循环
每当找到信件时,请使用else
语句将letterFound
设为true
然后立即停止i=mobile.length()
语句
else