删除Word的多次出现

时间:2014-01-30 08:11:04

标签: java regex string pattern-matching

如何删除String中多次出现的字词?这里很难的是,我不知道它是哪个词。见下面的例子。

  

这是我如何尝试将一个段落拆分成句子但是,有一个问题我的段落includes日期日期日期日期如2014年1月13日,单词includes如美国和数字

这里,有些词有多次出现。 sentencedatesincludeshow等字词不止一次出现过。请注意,重复可能不会发生在彼此附近,例如includes。我想删除这些,所以它将如下所示。

  

这就是我试图将一个段落分成一个句子的方法但是,有一个问题我的段落包含日期,如2014年1月13日,像U S和数字

请注意,删除多次出现并不意味着删除所有多次出现的单词。它只需保留一份并删除其余部分。

就像上面一样,会有很大的String,我不知道哪个词出现过多次。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分: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);

你必须稍微触摸它才能正确处理标点符号,但这应该让你开始,。

答案 1 :(得分:2)

您可以使用:

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作为最小字母数,您可以选择您想要的内容。

答案 2 :(得分: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(", ", " "));

这将返回:

  

[这就是我试图将一个段落分成句子但是,那里   问题我的日期包括2014年1月13日,单词U S和数字]