2012-02-25 119 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

相關問題