Hiii Friends, 我有一个类似的字符串;
* String s =“ 电力传输单元PX开关出气2液压系统发动机启动绿色电力传输单元灯“; *
此字符串是在数据库中的两列表的帮助下形成的。 正如您所看到的那样,String中有一个 UNIT ,它在String中出现两次。我的要求是,一个单词在String中必须是唯一的。 如果一个单词出现两次或两次以上,则不应该附加在String中。形成的String必须具有唯一的单词。 请帮帮我。
答案 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)
答案 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));
}