2014-01-30 69 views
2

如何刪除String中出現的多次出現的單詞?這裏的困難是,我不知道它是哪個詞。看下面的例子。刪除Word的多次出現

這是我怎麼怎麼試圖將一個段落分成句句但是,有一個問題我的一段includes日期日期日期日期像2014年1月13日,也就是說includes像美國和數字

這裏,有些詞有多處出現。諸如sentencedatesincludeshow之類的詞已經出現過一次以上。請注意,此重複可能不會發生在彼此附近,例如includes。我想刪除這些,所以它將如下所示。

這是我想一個段落分割成句子但是,有一個問題我的段落包括日期,像2014年1月13日,如美國單詞和數字

請注意,移除多發生並不意味着要刪除所有出現的多重字詞。它只會保留一個副本並刪除其餘部分。

就像上面那樣,將會有非常大的String s,我不知道哪個單詞出現過一次以上。我怎樣才能做到這一點?

回答

3

一次只複製一個單詞,忽略一路上的重複。使用哈希集來跟蹤重複項。

事情是這樣的......

String text = "This is how how I tried to split a paragraph into a sentence sentence But, there is a problem My paragraph includes dates dates dates dates like Jan 13, 2014 , words includes like U S and numbers"; 
StringBuilder result = new StringBuilder(); 
HashSet<String> set = new HashSet<String>(); 
for(String s : text.split(" ")) { 
    if (!set.contains(s)) { 
     result.append(s); 
     result.append(" "); 
     set.add(s); 
    } 
} 
System.out.println(result); 

你得觸摸到它了一點,妥善處理標點符號,但應該讓你開始,。

+0

是的,這工作。謝謝。 –

+1

@halfer Typo。看起來像代碼段是正確的 –

1

您可以使用此:

String rtsruoy = new StringBuilder(yourstr).reverse().toString(); 

String tluser = rtsruoy.replaceAll("(?s)(\\b[a-zA-Z]{3,}+\\b)(?=.*?\\1)", ""); 

String result = new StringBuilder(tluser).reverse().toString(); 

注:我已經選擇把3作爲最小的字母數,你可以選擇你想要的東西。

+0

當我測試這個(在java中)它似乎只刪除連續的重複,而不是分散的arou找到文本。 –

+0

感謝您的回覆。但似乎你應該知道這個詞先替換(1) –

+0

@TedBigham:我修改了代碼來處理非連續的單詞。 (我沒有很好地閱讀這個問題) –

1

你可以使用一個LinkedHashSet

String original = "This is how how I tried to split a paragraph into a sentence sentence But, there is a problem My paragraph includes dates dates dates dates like Jan 13, 2014 , words includes like U S and numbers"; 
System.out.println(new LinkedHashSet<String>(Arrays.asList(original.split(" "))).toString().replace(", ", " ")); 

這將返回:

[這是我想一個段落分割成句子但是,有 問題我包括日期,像1月13日,2014,單詞美國和數字]