2014-01-21 79 views
-1

嗨朋友, 我有一个字符串像;字符串中的唯一字

* 的String = “ 动力传递单元PX SWITCH BLEEDING 2液压系统的发动机起动GREEN动力传递单元LIGHT”; *

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

+0

“SELECT DISTINCT来自wordstable的单词“有点像这样。 –

+0

我真的不知道该怎么做。 – JavaFreak

回答

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

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

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

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

...它应该是微不足道的,你确定唯一性与Set数据结构。

0
  1. 创建列表
  2. 分割字符串
  3. 的foreach词串
    是一个单词?
    没有:在列表
    把一句话是:忽略拷贝过去
0
使用不同在数据库级

第一选项: 假人查询相同

"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; 
} 
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)); 
} 
+0

好的,我会试试这个.. – JavaFreak