2015-04-21 67 views
6

我正在通過CodingBat exercises for Java工作。我遇到以下問題:'佔位符'避免正面比較?

給定2個數組的長度相同的字符串,比較一個數組中的第一個字符串與另一個數組中的第一個字符串,第二個到第二個等等。計算2個字符串非空且以相同字符開始的次數。該字符串可以是任意長度,包括0

我的代碼是這樣的:

public int matchUp(String[] a, String[] b){ 

    int count = 0; 

    for (int i = 0; i < a.length; i++) { 
     String firstLetterA = a[i].length() == 0 
          ? "ê" 
          : a[i].substring(0, 1); 
     String firstLetterB = b[i].length() == 0 
          ? "é" 
          : b[i].substring(0, 1); 

     if (firstLetterA.equals(firstLetterB)) { 
      count++; 
     } 
    } 
    return count; 
} 

我的問題是:哪個「佔位」字符將被視爲優良作法是使用以避免firstLetterA之間不必要的比較和firstLetterB

在這種情況下,我只簡單地分配了兩個不同的字母,這些字母很少使用(至少英文版)。我試着用''(一個空的字符,而不是一個空格),當然,它們是相互匹配的。我也嘗試使用null,因爲我認爲它不能被正面比較,但也會導致問題。

+1

爲什麼你想/需要一個佔位符?爲什麼不直接比較第一個字符,並在字符串長度爲零時採取另一個操作? – Bohemian

+0

您可以使用'charAt()'而不是'substring()',所以它不會每次都創建一個新的'String'。 –

+0

重要提示:由於字符串之間的合成可能不同,因此如果使用重音字符等東西,則此接受的答案不一定能正常工作。這可能是也可能不是理想的行爲。 – Necreaux

回答

9

好的做法 - IMO - 是延長if條件,完全不使用任何虛字符:

for (int i = 0; i < a.length; i++) { 
    if (!a[i].isEmpty() && !b[i].isEmpty() && a[i].charAt(0) == b[i].charAt(0)) { 
     count++; 
    } 
}