2008-09-24 62 views
0

如果您正在使用Java或JavaScript,有什麼好辦法做到像一個String減法,這樣給出了兩個字符串:的JavaScript或Java字符串減法

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

你只是得到:

sub_component 

我知道我可以編寫代碼來比較字符,但我希望有一種方法可以以非常簡潔的方式進行。

另一個用例是要找到字符串之間的差異:

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

我其實只是想刪除相同的部分。

+0

我不知道怎麼的JavaScript與此相關... – 2008-09-24 20:17:58

+0

怎麼不是嗎?你永遠不需要從JavaScript中的另一個字符串中刪除字符串?當然,所有的解決方案都已經發布在java中,但是這並不會使問題失效。 – 2008-09-24 20:21:52

回答

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 ""; 
} 

...或大致相同的東西。

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

應該工作...

編輯:Apache的公共圖書館也有很大的使用

如下文所述,該StringUtils類事實上確實有這樣的方法: StringUtils.remove()

0

難道你不能只用一個空字符串來替換第二個字符串的出現嗎?

0

如果你只是想拿到最後一個點後,無論是,我覺得這種方法很容易在Javascript:

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

串將包含你正在尋找的價值。

3

乍一看,我還以爲正則表達式,但增加的問題,您通過添加到啓動串移除的可能性......

所以你必須做一個程序,即需要每字符相等出來的結果字符串的,是這樣的:

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

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

雖然這依賴於代碼爲1的字符不會出現在任何這些字符串中。

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