JavaScript或Java字符串减法
如果您使用的是Java或JavaScript,是否有一种很好的方法来执行字符串减法之类的操作,以便给定两个字符串: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
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解决方案。