2012-07-27 76 views
0

删除某些词。基本上我有一个字符串。我将字符串中的每个单词与我在数组中具有的预设数量的单词相比较。如果字符串中的某个单词与其中一个预设单词匹配,则将该单词从字符串中删除。从我有一点麻烦搞清楚如何从一个字符串中删除某些文字字符串

作为一个例子,我有字符串“是一个测试句”,运行方法后,我应该与单词的数组{“测试”,“句”}这里是我迄今...

编辑 基本上问题是,没有什么变化,我最终{ “是”, “一”, “测试”, “句”}

private void fillerWords(){ 

    String[] commonWords = {"the","of","to","and","a","in","is","it","you","that","he","was","for","on","are","with","as","i"}; 
    List <String>wordList = new ArrayList<String>(Arrays.asList(commonWords)); 

    //Split words in sentence up by word, put them into array 
    String s = "is a test sentance"; 
    String[] tArray = s.split(" "); 
    List <String>list = new ArrayList<String>(Arrays.asList(tArray));  

    //take out words 
    for(int i=0; i<list.size(); i++){ 
     //Check to see if a sentence word is a common word, if so remove word 
     for(int c=0; c<wordList.size(); c++){ 
      if(wordList.get(c) == list.get(i)){ 
       list.remove(i); 
      }//end if 
     }//end for 
    }//end for 


    for(int x=0; x<list.size(); x++){ 
     System.out.printf("%s %s \n", x, list.get(x)); 
    } 

} 

}

+0

你说你要的话{“测试”结束了,“句子”},但你究竟是以什么结束? – Mercurybullet 2012-07-27 20:16:26

+0

这是什么问题?粗略地说,它看起来应该起作用。但是,您应该为停用词使用HashSet,因为您可以保存内部循环,所以可以提供更好的运行时性能。 – Jochen 2012-07-27 20:20:39

+0

我最终得到的是{“是”,“一”,“测试”,“句”} ....基本上没有什么happnes – SNV7 2012-07-27 20:22:49

回答

3

问题是你从列表中删除索引i,然后增加i,所以你每次删除时都跳过一个。也许创造另一个列表称为输出,而不是从“名单”中删除时你打不好的话,只需添加到“输出”当你打了良好的口碑。

而且,故障安全说,你不能用“==”比较字符串,你需要使用string1.equals(字符串2)比较。

而且,这里的修复它不改变太多一小段路:

你比较块变化,例如:

if(wordList.get(c).equals(list.get(i))){ 
    list.remove(i); 
    i--; 
    break; 
} 
+0

你还是比较双=字符串。 – Failsafe 2012-07-27 20:30:53

+0

,谢谢,不知道我错过了... – 2012-07-27 20:31:22

+0

谢谢,它工作正常,现在 – SNV7 2012-07-27 20:32:00

2

使用removeAll()删除元素存在于另一个集合中。

list.removeAll(wordlist) 

它将从list存在于wordlist删除所有元素。

(代码应太,但它是一个较短的方式。)

2

你不能

if(wordList.get(c) == list.get(i)){ 
      list.remove(i); 
     }//end if 

你需要做的比较字符串:

if(wordList.get(c).equals(list.get(i))){ 
      list.remove(i); 
     }//end if 
0
String regex; 
    regex = "\\s*\\bword\\b\\s*";//word must to be removed. 
    while(out.contains("word")) 
    out = out.replaceAll(regex, "");//out if input String and finnaly is out.. 
+0

这种方式为我工作:) – 2015-10-11 22:03:13

+1

尽管此代码可以回答这个问题,提供有关_how_额外的内容及/或_why_它解决了问题会改善答案的长期价值。 – 2015-10-11 22:20:45

+0

这不适用于删除包含以下内容的单词:“;”或“,”或... – 2015-10-15 20:20:49

相关问题