JavaScript或Java字符串减法

时间:2008-09-24 19:50:25

标签: java javascript regex

如果您使用的是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

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

7 个答案:

答案 0 :(得分:7)

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

......或大致相应的东西。

答案 1 :(得分:6)

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

应该工作......

编辑:Apache commons库也很好用

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

答案 2 :(得分:3)

乍一看,我想到了RegExp,但是添加到问题中,你通过添加到start-string来消除了这种可能性......

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果你只是想在最后一个点之后得到任何东西,我在Javascript中发现这个方法很简单:

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

subString将包含您正在寻找的值。

答案 5 :(得分:0)

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

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

答案 6 :(得分:-2)

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