嗨朋友, 我有一个字符串像;字符串中的唯一字
* 的String = “ 动力传递单元PX SWITCH BLEEDING 2液压系统的发动机起动GREEN动力传递单元LIGHT”; *
该字符串在两列数据库的帮助下形成。 正如你所看到的那样,在字符串中出现两次的字符串中有一个UNIT。我的要求是,一个字在字符串中必须是唯一的。 如果一个单词出现两次或两次以上,它不应该追加到String中。形成的String必须有唯一的单词。 请帮我解决这个问题。
嗨朋友, 我有一个字符串像;字符串中的唯一字
* 的String = “ 动力传递单元PX SWITCH BLEEDING 2液压系统的发动机起动GREEN动力传递单元LIGHT”; *
该字符串在两列数据库的帮助下形成。 正如你所看到的那样,在字符串中出现两次的字符串中有一个UNIT。我的要求是,一个字在字符串中必须是唯一的。 如果一个单词出现两次或两次以上,它不应该追加到String中。形成的String必须有唯一的单词。 请帮我解决这个问题。
简短的解决方案。方法的
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
这里可能最棘手的一点是将字符串分割成单词。你还没有真正定义一个“单词”是什么,并且根据国际化的故事,这可能非常简单或非常困难(例如,如果你对一个单词的定义非常以英语为中心,而你只需要拆分那么它应该是一个非常简单的任务;但是,如果你需要说明多个表意文字可能是单独的“单词”但不能用空格分隔的CJK语言,这可能是非常困难的)。
假设你有一个分词功能,这样你可以这样做:
for (String word : getWordsIn(originalString)) {
// ...
}
...它应该是微不足道的,你确定唯一性与Set
数据结构。
第一选项: 假人查询相同
"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;
}
这里,你可以找到重复的单词(请注意,不使用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));
}
好的,我会试试这个.. – JavaFreak
“SELECT DISTINCT来自wordstable的单词“有点像这样。 –
我真的不知道该怎么做。 – JavaFreak