String中的唯一单词

时间:2014-01-21 11:10:50

标签: java java-ee

Hiii Friends, 我有一个类似的字符串;

* String s =“ 电力传输单元PX开关出气2液压系统发动机启动绿色电力传输单元灯“; *

此字符串是在数据库中的两列表的帮助下形成的。 正如您所看到的那样,String中有一个 UNIT ,它在String中出现两次。我的要求是,一个单词在String中必须是唯一的。 如果一个单词出现两次或两次以上,则不应该附加在String中。形成的String必须具有唯一的单词。 请帮帮我。

5 个答案:

答案 0 :(得分:3)

复制过去的简短解决方案。

private String deleteNonUniqueWords(String str) {    
    Set<String> result = new LinkedHashSet<>(Arrays.asList(str.split("\\s+")));
    StringBuilder sb = new StringBuilder();
    for (String s : result) {
        sb.append(s);
        sb.append(" ");
    }
    return sb.toString();
}

方法的用法:

String s = "POWER TRANSFER UNIT PX SWITCH BLEEDING 2 HYDRAULIC SYSTEM ENGINE START GREEN POWER TRANSFER UNIT LIGHT";
System.out.print(deleteNonUniqueWords(s))

输出:

POWER TRANSFER UNIT PX SWITCH BLEEDING 2 HYDRAULIC SYSTEM ENGINE START GREEN LIGHT

答案 1 :(得分:1)

这里最棘手的可能是将字符串分割为单词。你还没有真正定义“单词”是什么,并且根据国际化的故事,这可能非常简单或非常困难(例如,如果你的单词定义非常以英语为中心,你只需要拆分在空间上,那应该是一个非常简单的任务;但是,如果你需要考虑CJK语言,其中多个表意文字可能是单独的“单词”但没有用空格分隔,这可能非常困难。)

假设你有一个单词分段功能,你可以这样做:

for (String word : getWordsIn(originalString)) {
  // ...
}

...使用Set数据结构确定唯一性应该是微不足道的。

答案 2 :(得分:0)

  1. 创建列表
  2. 拆分字符串
  3. 字符串中的Foreach字 是列表中的单词?
    不:把词放在清单中 是的:忽略

答案 3 :(得分:0)

使用distinct的数据库级别的第一个选项: 虚拟查询相同的

 "Select distinct word from wordsTable"

第二个选项:

 String[] words=s.split("\\s+");
 Set<String> uniqueStringSet=new LinkedHashSet<>(Arrays.asList(words))

 String havingUniqueWords="";

 for(String word:uniqueStringSet){

     havingUniqueWords=havingUniqueWords+word;
 }

答案 4 :(得分:0)

这是一种可以找到重复单词的方法(注意不使用Lucene):

Pattern p = Pattern.compile("(?i)\\b(\\w++)(?=.*\\1)");
Matcher m = p.matcher(" POWER TRANSFER UNIT PX SWITCH BLEEDING 2 HYDRAULIC SYSTEM ENGINE START GREEN POWER TRANSFER UNIT LIGHT");
Set<String> duplicatedWords = new HashSet<String>();
while (m.find()) {
    duplicatedWords.add(m.group(1));
}