【问题标题】:Compare two strings in Java and show the character differences比较Java中的两个字符串并显示字符差异
【发布时间】:2017-08-13 17:12:35
【问题描述】:

我正在寻找一种方法来逐个字符地比较两个字符串。

它应该显示是否有其他字符没有出现在两个字符串中。

有人有解决办法吗?

 for(int j=0; j < min; j++) {
          s1 = w1.substring(j,j+1);
          s2 = w2.substring(j,j+1);

          if (!s1.equalsIgnoreCase(s2) ){
            counter++;    
            
          }
        }

这看起来只是顺序的差异。但我想知道这两个字符串之间是否存在差异。

 So **abc** and **cab** should count as a hit

【问题讨论】:

  • 效率低下?以什么方式?
  • 您应该更清楚地定义您真正想要实现的目标。 “我正在寻找一种方法来逐个字符地比较两个字符串” 然后“我想找出这两个字符串之间是否有区别”。那么“逐个字符”还是“完全不同”?完全不同的东西。
  • 这让我印象深刻,是一个“Gimme teh codez”类型的问题。您已经尝试过哪些解决方案?是什么在这些尝试中不起作用?您能否提供一个示例输入集以及每个输入的输出应该是什么?事实上,很难理解您为自己寻找解决方案付出了哪些努力,而且鉴于相对模糊的需求陈述,也很难理解您真正想要的答案。

标签: java string comparison character


【解决方案1】:

我认为您想要显示 2 个字符串具有相同的字母和相同数量的每个字母。使用 2 个哈希集,其中键是字符,值是字符串中出现的次数。每个字符串都有一个哈希集,然后循环遍历字符串,将字符添加到集合中并比较以查看集合是否相等。

【讨论】:

    【解决方案2】:

    例如将它们转换为 charArrays 并将差异添加到一个空字符串中,例如 for 循环扫描它们

    String a = "abc";
    char[] aa = a.toCharArray();
    String b = "cba";
    char[] bb = b.toCharArray();
    String dif;
    
    public void differ() {
      for(int i = 0; i < aa.length - 1; i++) {
        if(!aa[i].equals(bb[i])) {
          dif += aa[i];
        }
      }
    }
    

    我相信运行diff() 会返回“ac”,因为它们中间都有b。这是你想要的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 2019-02-19
      相关资源
      最近更新 更多