2012-02-25 120 views
1

这种方法是几种之一。我想知道,如果我在这里说“if(dig1.contains()& & dig2.contains()& res.contains())”是正确的。在正则表达式中 1.我需要确保字符串 中没有字母2.我需要查看string1和string2的总和是否合计为第三个字符串。否则返回false。感谢大家的帮助。这是迄今为止我所拥有的。如果没有字母则返回true

/** 
    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

如果字符串包含除数字和字母之外的其他符号,该怎么办?你会得到NumberFormatException。 – 2012-02-25 10:34:36

+0

不,它是完全数字和字母。输入是这样的:add1 = SJF3G add2 = SDFH3 result = 3SH4H。没有符号或其他任何东西。感谢您的帮助。 – 2012-02-25 10:40:48

+0

还有一件事。我注意到你倾向于这样做:'String dig1 =“”+ add1;'。如果你想连接字符串,只要'字符串dig1 + = add1;'或者如果你想分配一个字符串到另一个,做这个'字符串dig1 = add1;' – user219882 2012-02-25 11:51:57

回答

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; 
    } 
} 
+0

非常感谢您的帮助。我很感激。 – 2012-02-25 11:09:41

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; 
} 
+0

谢谢乔恩我感谢您的帮助。 – 2012-02-25 11:09:16

+0

完全没问题=) – Jon 2012-02-25 11:12:04

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块, 那么你就不必使用正则表达式来检查字符串事先。

我在这里将我的补加注释:如果你要使用这个所有的地方,它重构为一个方法:

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; 
+1

谢谢mindandmedia的帮助。我感谢您的帮助。 – 2012-02-25 11:09:27

+0

你非常欢迎。因为你很有礼貌,所以在这里有另一个建议:把整个事情变成一个函数:private boolean containsNoLetters(String input){try {Integer.parseInt(input);返回true; } catch {return false}});那么你可以重复使用它... – mindandmedia 2012-02-25 11:13:30

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

+0

谢谢托马斯先生的帮助。 – 2012-02-25 11:09:34

+0

@Bartg不客气... – user219882 2012-02-25 11:47:47

4

我建议你使用另一个正则表达式。 IT会检查您的字符串是否只包含数字:

if (dig1.matches("^[0-9]*$") 
    && dig2.matches("^[0-9]*$") 
    && res.matches("^[0-9]*$")) 

使用您当前的代码,您会在很多情况下(例如,当有小写字母时。

+0

谢谢你的帮助Strandjev先生。感谢你的帮助。 – 2012-02-25 11:10:09

相关问题