【问题标题】:'Placeholder' character to avoid positive comparison?“占位符”字符以避免正面比较?
【发布时间】:2015-04-21 15:07:19
【问题描述】:

我正在处理CodingBat exercises for Java。我遇到了以下问题:

给定两个长度相同的包含字符串的数组,将一个数组中的第一个字符串与另一个数组中的第一个字符串进行比较,将第二个与第二个进行比较,依此类推。计算 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,因为我认为它无法进行正面比较,但这也会导致问题。

【问题讨论】:

  • 为什么需要/需要占位符?为什么不只比较第一个字符,当字符串长度为零时再进行操作?
  • 你可以用charAt()代替substring(),所以它不会每次都创建一个新的String
  • 重要提示:如果使用重音字符等内容,此答案和已接受的答案不一定能正常工作,因为字符串之间的组合可能不同。这可能是也可能不是理想的行为。

标签: java arrays string compare


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是替代解决方案。

    • 为每个数组迭代嵌套的二维循环
    • 检查两个数组中的字符是否相同,并具有相应的顺序和 字符串长度
    • 通过 subString 方法比较字符。
    • 增加计数

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

    希望对你有帮助

    【讨论】:

      【解决方案3】:
      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;
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-24
        • 2016-07-06
        • 1970-01-01
        • 2013-12-11
        • 2016-04-24
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        相关资源
        最近更新 更多