【问题标题】:JavaScript or Java String SubtractionJavaScript 或 Java 字符串减法
【发布时间】:2010-09-12 20:50:08
【问题描述】:

如果您使用的是 Java 或 JavaScript,有没有一种好方法可以执行字符串减法之类的操作,以便给定两个字符串:

org.company.project.component
org.company.project.component.sub_component

你会得到:

sub_component

我知道我可以编写代码来遍历字符串比较字符,但我希望有一种方法可以以一种非常紧凑的方式来完成。

另一个用例是查找字符串之间的差异:

org.company.project.component.diff
org.company.project.component.sub_component

我实际上只想删除相同的部分。

【问题讨论】:

  • 我看不出 JavaScript 在这里有什么意义...
  • 不是吗?您永远不需要从 javascript 中的另一个字符串中删除一个字符串?当然,所有解决方案都已在 java 中发布,但这并不会使问题无效。
  • LOL - 好吧,让我们将其标记为 Java/JavaScript/C#/VB.NET/Python/Ruby/erlang/Smalltalk/Lisp/etc... 我的意思是,JavaScript 和 Java 什么都没有除了与 C#、C、C++ 等共享的语法之外,这不是一个真正的 JavaScript 解决方案。

标签: java javascript regex


【解决方案1】:

取决于准确地你想要什么。如果您正在寻找一种在一般情况下比较字符串的方法 - 意味着在任意输入之间找到公共子字符串 - 那么您正在寻找更接近 Levenshtein 距离和类似算法的东西。但是,如果您只需要前缀/后缀比较,这应该可以:

public static String sub(String a, String b) {
    if (b.startsWith(a)) {
        return b.subString(a.length());
    }

    if (b.endsWith(a)) {
        return b.subString(0, b.length() - a.length());
    }

    return "";
}

...或类似的意思。

【讨论】:

  • 感谢 Chris 和 Daniel(以及其他所有人)。速度快得惊人。
  • 这对于所要求的内容来说似乎太多了 - Erickson 的方法(将字符串 A 中的字符串 B 替换为空字符串)更加简单易读。
  • @Herb 同意,我确实更喜欢 Erickson(和 Chris)的方法以提高可读性。但是,他不强制执行严格的前缀/后缀。我的问题是这个问题有点不明确:String 差异到底意味着什么?
【解决方案2】:
String result = "org.company.project.component.sub_component".replace("org.company.project.component","")

应该可以...

编辑:Apache 公共库也很好用

如下所述,StringUtils 类实际上有一个方法: StringUtils.remove()

【讨论】:

    【解决方案3】:

    乍一看,我想到了正则表达式,但添加到问题中,您通过添加到起始字符串来消除这种可能性...

    所以你必须创建一个过程,从结果字符串中取出每个相等的字符,如下所示:

    <script type="text/javascript">
    var a = "org.company.project.component.diff";
    var b = "org.company.project.component.sub_component";
    var i = 0;
    while(a.charAt(i) == b.charAt(i)){
      i++;
    }
    alert(b.substring(i));
    </script>
    

    顺便说一句,在任何情况下将 Java 和 javascript 设置为平等没有意义,一种流行的说法可能是:

    Java 和 javascript 有四个共同点:j - a - v - a !-)

    【讨论】:

      【解决方案4】:

      你不能用空字符串替换第二个字符串中第一个字符串的出现吗?

      【讨论】:

        【解决方案5】:

        如果您只是想获取最后一个点之后的内容,我发现这种方法在 Javascript 中很容易:

        var baseString = "org.company.project.component.sub_component";
        var splitString = baseString.split(".");
        var subString = splitString[splitString.length - 1];
        

        subString 将包含您要查找的值。

        【讨论】:

          【解决方案6】:
          function sub(a, b) {
            return [a, b].join('\x01').match(/^([^\x01]*)[^\x01]*\x01\1(.*)/)[2];
          }
          

          虽然这依赖于代码为 1 的字符不会出现在任何这些字符串中。

          【讨论】:

            【解决方案7】:

            这是问题的Javascript结尾的解决方案:

            String.prototype.contracat = function(string){
                var thing = this.valueOf();
                for(var i=0; i<string.length;i++){
                    thing=thing.replace(string.charAt(i),"");
                }
                return thing
            };
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-12-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-10-05
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多