'Placeholder'避免正面比较的性格?



我正在为Java进行CodingBat练习。我遇到了以下问题:

给定 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;
}

我的问题是:使用哪个"占位符"字符被认为是避免firstLetterAfirstLetterB之间不必要的比较的好习惯?

在这种情况下,我只是分配了两个很少使用的不同字母(至少在英语中)。我尝试只使用''(一个空字符,而不是空格),但当然,它们相互匹配。我还尝试将null用于两者,因为我认为它不能被正面比较,但这也会导致问题。

一个好的做法——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++;
    }
}

这是替代解决方案。

  • 迭代每个数组的嵌套 2D 循环
  • 检查两个数组中的字符是否相同,顺序和字符串长度
  • 通过子字符串方法比较字符。
  • 增加计数

.

public static int matchingChar(String[] a, String[] b) {
    int count=0;
    for(int i=0;i<a.length;i++) {
        for(int j=0;j<b.length;j++) {
            if(i==j && a[i].length()!=0 && b[i].length()!=0) {
                if(a[i].startsWith(b[i].substring(0,1))) {
                    count++;
                }
            }
        }
    }
    return count;
}

希望对你有帮助

public int matchUp(String[] a, String[] b) {
  int count = 0;
  
  for(int i=0;i<a.length;i++)
  {
    if(a[i].equals("") || b[i].equals(""))
      continue;
    if(a[i].charAt(0) == b[i].charAt(0))
      count++;
  }
  return count;
}

当数组的当前元素为空时,继续下一个元素。

相关内容

  • 没有找到相关文章

最新更新