2010-09-20 108 views

回答

2

您可以通過去除一些重複的:

if (profile.isIgnoreCase()) { 
    masterKey = masterKey.toLowerCase(); 
    masterValue = masterValue.toLowerCase(); 
} 

if (masterKey.equals(targetKey)) { 
    if (masterValue.equals(targetValue)) { 
     doOK(masterKey, masterValue); 
    } else { 
     if (checkErrors) { 
      doError(masterKey, masterValue, targetValue); 
     } 
    } 
} 

我也刪除break S作爲我並不像你需要他們給我

[更新]或者,如何編寫一個新的方法來處理比較

public boolean isEqual(String a, String b, boolean ignoreCase) { 
    if (ignoreCase) { 
     return a.equalsIgnoreCase(b); 
    } else { 
     return a.equals(b); 
    } 
} 

然後你會更新你的代碼,如下所示:

if (isEqual(masterKey,targetKey,profile.isIgnoreCase())) { 
    if (isEqual(masterValue,targetValue,profile.isIgnoreCase())) { 
     doOK(masterKey, masterValue); 
    } else { 
     if (checkErrors) { 
      doError(masterKey, masterValue, targetValue); 
     } 
    } 
} 
+0

當然,您還需要確保targetKey/targetValue也是小寫。 – EboMike 2010-09-20 21:44:37

+0

b當然 - 很好發現EboMike – irishbuzz 2010-09-20 21:46:42

+0

好主意,但我們正在改變這裏的數據。 MaSteR密鑰可能是混合大小寫,這在後來在程序中變得相關。也許臨時變量..爲比較目的...嗯.. – JAM 2010-09-20 21:52:26

0

你可以把它縮短了通過與他們所代表的布爾值,即替換他們:masterKey.equalsIgnoreCase((targetKey))truefalse。其中可能有助於使其更短,因爲你需要一個都不能少ifelse條款。

+0

將表達式轉換爲單獨的布爾變量(如果這就是你的意思)只有在某些if表達式重複時纔有意義,而不是。 – EboMike 2010-09-20 21:51:39

+0

這不是事實!他有兩個完全相同的if-then結構,只是嵌套在if/else結構中!這不是有效的:他可以簡單地處理if/else BEFOREHAND,然後運行嵌套循環。 – TaslemGuy 2010-09-21 21:11:23

0

不知道你是否需要休息一下。但我相信這完全等同於您的代碼。

bool ignoreCase = profile.isIgnoreCase(); 

if(ignoreCase and masterKey.equalsIgnoreCase(targetKey) or !ignoreCase and masterKey.equals(targetKey)) { 

    if(ignoreCase and masterValue.equalsIgnoreCase(targetValue) or !ignoreCase and masterValue.equals(targetValue)) { 

     doOK(masterKey, masterValue); 
     break; 

    } else if(checkErrors) { 

     doError(masterKey, masterValue, targetValue); 
     break; 
    } 
} 

或者我會寫在masterKey和masterValue類

public bool equalsCheckCase(targetKey, ignoreCase) { 

    if(ignoreCase) { 
     return this.equalsIgnoreCase(targetKey) 
    } else { 
     return this.equals(targetKey); 
    } 
} 

下面的函數因此,代碼示例變得更具可讀性。

bool ignoreCase = profile.isIgnoreCase(); 

if(masterKey.equalsCheckCase(targetKey, ignoreCase)) { 

    if(masterValue.equalsCheckCase(targetValue, ignoreCase)) { 

     doOK(masterKey, masterValue); 
     break; 

    } else if(checkErrors) { 

     doError(masterKey, masterValue, targetValue); 
     break; 
    } 
} 
2

將鍵和值比較拉出到局部變量中,可以消除重複的邏輯。這樣可以避免修改字符串,並且作爲獎勵使得if語句在眼睛上更容易一些。

boolean keysMatch, valuesMatch; 

if (profile.isIgnoreCase()) { 
    keysMatch = masterKey .equalsIgnoreCase(targetKey); 
    valuesMatch = masterValue.equalsIgnoreCase(targetValue); 
} else { 
    keysMatch = masterKey .equals(targetKey); 
    valuesMatch = masterValue.equals(targetValue); 
} 

if (keysMatch) { 
    if (valuesMatch) { 
     doOK(masterKey, masterValue); 
     break; 
    } else { 
     // Key is either Missing or is an Error 
     if (checkErrors) { 
      doError(masterKey, masterValue, targetValue); 
      break; 
     } 
    } 
} 
0
bool ignoreCase = profile.isIgnoreCase(); 

if ((ignoreCase && masterKey.equalsIgnoreCase(targetKey)) || 
    (!ignoreCase && masterKey.equals(targetKey))){ 

    if ((ignoreCase && masterValue.equalsIgnoreCase(targetValue)) || 
     (!ignoreCase && masterValue.equals(targetValue))) { 

     doOK(masterKey, masterValue); 
     break; 
    } else 
     if (checkErrors) { 
     doError(masterKey, masterValue, targetValue); 
     break; 
     } 
} 

應該是這樣的快讀布爾值,如果這個計算結果爲假,程序可以跳到下一個評估早於運行字符串比較第一。