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的字符不会出现在任何这些字符串中。