Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript或Java字符串减法_Java_Javascript_Regex - Fatal编程技术网

JavaScript或Java字符串减法

JavaScript或Java字符串减法,java,javascript,regex,Java,Javascript,Regex,如果您使用的是Java或JavaScript,是否有一种很好的方法来执行字符串减法之类的操作,以便给定两个字符串: org.company.project.component org.company.project.component.sub_component 你只需要得到: sub_component 我知道我可以编写代码来遍历字符串比较字符,但我希望有一种方法可以以非常紧凑的方式完成 另一个用例是查找字符串之间的差异: org.company.project.component.dif

如果您使用的是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
实际上,我只想删除相同的部分

String result = "org.company.project.component.sub_component".replace("org.company.project.component","")
应该有用

编辑:apachecommons库也很好用

如下所述,StringUtils类实际上有一个用于此目的的方法:

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

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

子字符串将包含您要查找的值。

乍一看,我想到了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\1(.*)/)[2];
}

尽管这取决于代码为1的字符不会出现在任何字符串中。

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

谢谢克里斯、丹尼尔和你们所有人。这是惊人的快。对于所请求的内容来说,这似乎太多的代码了-埃里克森的方法用空字符串替换字符串A中的字符串B更简单,可读性更好。@Herb同意,我更喜欢埃里克森和Chris的方法的可读性。但是,his不强制执行严格的前缀/后缀。我的问题是,这个问题有点定义不清:字符串差异到底意味着什么?我不明白JavaScript在这里有什么关系……它是怎么回事?在javascript中,您永远不需要从另一个字符串中删除一个字符串?诚然,所有的解决方案都是用java发布的,但这并不意味着question.LOL无效——那么好吧,让我们将其标记为java/JavaScript/C/VB.NET/Python/Ruby/erlang/Smalltalk/Lisp/等等。。。我的观点是,JavaScript和java除了C、C、C++等语法之外没有任何共同之处,这不是一个真正的JavaScript解决方案。