0

我在弄清楚如何从字符串中删除某些单词时遇到了一些麻烦。基本上我有一个字符串。我将字符串中的每个单词与数组中预设的单词数进行比较。如果字符串中的单词与预设单词之一匹配,我会从字符串中删除该单词。

作为一个例子,我有字符串“是一个测试句子”,在运行该方法后,我应该有一个带有单词 {“test”,“sentence”} 的数组,这是我到目前为止所拥有的......

编辑基本上问题是没有任何改变,我最终得到 {"is", "a", "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));
    }

}

}

4

4 回答 4

3

问题是您要从列表中删除索引 i 然后递增 i,因此每次删除时都会跳过一个。也许创建另一个名为 output 的列表,而不是在遇到坏词时从“列表”中删除,而是在遇到好词时添加到“输出”中。

另外,正如Failsafe所说,你不能使用“==”来比较字符串,你需要使用string1.equals(string2)来比较。

此外,这里有一个简短的方法来修复它而不会改变太多:

更改您的比较块,如下所示:

if(wordList.get(c).equals(list.get(i))){
   list.remove(i);
   i--;
   break;
}
于 2012-07-27T20:23:38.400 回答
2

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

list.removeAll(wordlist)

它将删除list存在于中的所有元素wordlist

(您的代码也应该可以工作。但这是一种更短的方法)

于 2012-07-27T20:22:29.317 回答
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
于 2012-07-27T20:23:37.637 回答
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..
于 2015-10-11T22:00:10.763 回答