这种方法是其中之一。我想知道我是否在这里说“if(dig1.contains()&& dig2.contains()&& res.contains())”。在正则表达式 我需要确保字符串中没有字母 2.我需要查看string1和string2的总和是否加起来到第三个字符串。否则返回false。感谢大家的帮助。到目前为止,这就是我所拥有的。
/**
Returns true if the puzzle is solved.
@return true if the puzzle has no letters and the
first two numbers add up to the third
*/
public boolean isSolved()
{
String dig1=""+add1;
String dig2=""+add2;
String res=""+result;
//String a1=""+dig1;
if(dig1.contains("[^A-Z]") && dig2.contains("[^A-Z]") && res.contains("[^A-Z]")){
int i=Integer.parseInt(dig1);
int j=Integer.parseInt(dig2);
int k=Integer.parseInt(res);
if(i+j==k)
return true;
else
return false;
}
else
return false;
}
答案 0 :(得分:4)
为什么要使用正则表达式?如果无法进行转换,Integer.parseInt()
将抛出异常。只需捕获异常,然后您就会知道字符串包含除数字之外的其他内容。有点像这样:
public boolean isSolved() {
try {
int i = Integer.parseInt(dig1);
int j = Integer.parseInt(dig2);
int k = Integer.parseInt(res);
return (i+j) == k;
}
catch (NumberFormatException e) {
return false;
}
}
答案 1 :(得分:4)
我建议你使用另一个正则表达式。 IT将检查您的字符串是否仅包含数字:
if (dig1.matches("^[0-9]*$")
&& dig2.matches("^[0-9]*$")
&& res.matches("^[0-9]*$"))
使用您当前的代码,在许多情况下您将获得例外,例如当有小写字母时。
答案 2 :(得分:2)
您可以使用try-catch语句:
try {
int i=Integer.parseInt(dig1);
int j=Integer.parseInt(dig2);
int k=Integer.parseInt(res);
if(i+j==k)
return true;
else
return false;
}
} catch (NumberFormatException numForEx) {
return false;
}
答案 3 :(得分:2)
不,这是将字符串转换为整数的复杂方法。 (如果那就是你要的)
public boolean isSolved()
{
String dig1=""+add1;
String dig2=""+add2;
String res=""+result;
try{
int i=Integer.parseInt(dig1);
int j=Integer.parseInt(dig2);
int k=Integer.parseInt(res);
if((i+j)==k) return true;
return false;
} catch {
return false;
}
}
所以,基本上,你可以将它包装在try / catch-block中, 那么你不必事先使用正则表达式来检查字符串。
我在这里添加了我的addtl评论:如果您打算在整个地方使用它,请将其重构为方法:
private boolean IsOnlyNumbers( String input ){
try{
Integer.parseInt(input);
return true;
} catch {
return false;
}
}
或者,既然你需要这个号码,你可以这样做:
private int GetNumber( String input ){
try{
return Integer.parseInt(input);
} catch {
return -1;
}
}
然后检查:
var dig1 = GetNumber(add1);
var dig2 = GetNumber(add2);
var res = GetNumber(add2);
if( dig1 > 0 && dig2 > 0 && dig3 > 0 ) return dig1+dig2 == res;
答案 4 :(得分:2)
我会推荐这个解决方案
public boolean isSolved() {
try {
int dig1 = Integer.parseInt(add1);
int dig2 = Integer.parseInt(add2);
int res = Integer.parseInt(result);
return dig1 + dig2 == res;
} catch (NumberFormatException ex) {
return false;
}
}
如果所有字符串都是数字,则转换是正确的,您可以比较这些数字。如果包含字母或其他错误字符,则抛出异常并返回false
。