如何删除String
中多次出现的字词?这里很难的是,我不知道它是哪个词。见下面的例子。
这是我如何尝试将一个段落拆分成句子但是,有一个问题我的段落
includes
日期日期日期日期如2014年1月13日,单词includes
如美国和数字
这里,有些词有多次出现。 sentence
,dates
,includes
和how
等字词不止一次出现过。请注意,重复可能不会发生在彼此附近,例如includes
。我想删除这些,所以它将如下所示。
这就是我试图将一个段落分成一个句子的方法但是,有一个问题我的段落包含日期,如2014年1月13日,像U S和数字
请注意,删除多次出现并不意味着删除所有多次出现的单词。它只需保留一份并删除其余部分。
就像上面一样,会有很大的String
,我不知道哪个词出现过多次。我怎样才能做到这一点?
答案 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和数字]