如果没有字母,则返回true

时间:2012-02-25 10:29:59

标签: java regex

这种方法是其中之一。我想知道我是否在这里说“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;

}

5 个答案:

答案 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