我在弄清楚如何从字符串中删除某些单词时遇到了一些麻烦。基本上我有一个字符串。我将字符串中的每个单词与数组中预设数量的单词进行比较。如果字符串中的单词与预设单词之一匹配,则从字符串中删除该单词。
作为一个例子,我有字符串“是一个测试句子”,运行该方法后,我应该有一个单词{“test”,“sentence”}这就是我到目前为止所拥有的......
编辑 基本上问题是没有任何改变,我最终得到{“是”,“一个”,“测试”,“句子”}
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 :(得分:3)
问题是你要从列表中删除索引i然后递增i,所以每次删除时都要跳过一个。也许创建另一个名为output的列表,而不是在遇到一个坏词时从“list”中删除,只需在你说一个好词时添加到“output”。
另外,正如Failsafe所说,你不能用“==”来比较字符串,你需要使用string1.equals(string2)进行比较。
此外,这里有一个简短的方法来修复它而不会改变太多:
更改比较块:
if(wordList.get(c).equals(list.get(i))){
list.remove(i);
i--;
break;
}
答案 1 :(得分:2)
使用removeAll()
删除另一个集合中存在的元素。
list.removeAll(wordlist)
它将删除list
中存在的wordlist
中的所有元素。
(您的代码也可以使用。但这是一种较短的方式)
答案 2 :(得分: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
答案 3 :(得分: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..