JavaScript或者Java字符串减法

时间:2020-03-06 14:41:09  来源:igfitidea点击:

如果我们使用的是Java或者JavaScript,是否有一种很好的方法来执行类似String减法的操作,以便给出两个字符串:

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

我们将得到:

sub_component

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

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

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

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

解决方案

String result = "org.company.project.component.sub_component".replace("org.company.project.component","")

应该管用...

编辑:Apache Commons库也很好用

如下所述,StringUtils类实际上具有用于此目的的方法:
StringUtils.remove()

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

取决于我们想要什么。如果我们正在寻找一种在一般情况下比较字符串的方法-意味着找到任意输入之间的公共子字符串-那么我们正在寻找的是更接近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 "";
}

...或者大致与此相关的内容。

如果我们只是想获取最后一个点之后的内容,我会发现此方法在Javascript中很简单:

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

subString将包含我们要查找的值。

乍一看,我想到了RegExp,但是增加了一个问题,我们通过添加到开始字符串中消除了这种可能性...

因此,我们必须创建一个过程,该过程将从结果字符串中取出每个相等的字符,如下所示:

<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!-)

function sub(a, b) {
  return [a, b].join('\x01').match(/^([^\x01]*)[^\x01]*\x01(.*)/)[2];
}

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