2015-01-30 1 views
0

У меня есть список строк, и я хочу, чтобы удалить некоторые стоп-слова из этого списка:Удаление стоп-слова из списка строк

for (int i = 0; i < simple_title.getItemCount(); i++) { 
    // split the phrase into the words 
    String str = simple_title.getItem(i); 
    String[] title_parts = str.split(" "); 
    ArrayList<String> list = new ArrayList<>(Arrays.asList(title_parts)); 
    for (int k = 0; k < list.size(); k++) { 
     for (int l = 0; l < StopWords.stopwordslist.length; l++) { 
      // stopwordslist is a Static Variable in class StopWords 
      list.remove(StopWords.stopwordslist[l]); 
     } 
    } 

    title_parts = list.toArray(new String[0]); 
    for (String title_part : title_parts) { 
     // and here I want to print the string 
     System.out.println(title_part); 
    } 
    Arrays.fill(title_parts, null); 
} 

Проблема в том, что после удаления стоп-слов я получаю только первый индекс title_part, например если у меня есть список строк, таких как:

list of strings 
i am a list 
is remove stop there list... 

после удаления стоп-слов я только получать:

list 
list 
remove 

Но что я должен получить является:

list strings 
    list 
    remove stop list 

I работали над этим, но теперь я смущен, может кто-нибудь сказать мне, пожалуйста, что я делаю неправильно?

+0

Отформатируйте код перед отправкой! Его максимальные 3 нажатия клавиш, и делает ваш код более читаемым –

ответ

1

Вы удаляете предметы из своего List по индексу, определяемому итерацией вашего массива StopWords!

Таким образом, удаление произвольно, по меньшей мере, и в конечном итоге будет зависеть от размера ваших слов остановки.

Вот самодостаточным пример того, что вы можете сделать вместо этого:

// defining the list of words (i.e. from your split) 
List<String> listOfWords = new ArrayList<String>(); 
// adding some examples here (still comes from split in your case) 
listOfWords.addAll(Arrays.asList("list", "of", "strings", "i", "am", "a", "list", "is", "remove", "stop", "there", "list")); 
// defining an array of stop words (you probably want that as a constant somewhere else) 
final String[] stopWords = {"of", "i", "am", "a", "is"}; 
// printing un-processed list 
System.out.printf("Dirty: %s%n", listOfWords); 
// invoking removeAll to remove all stop words 
listOfWords.removeAll(Arrays.asList(stopWords)); 
// printing "clean" list 
System.out.printf("Clean: %s%n", listOfWords); 

Выход

Dirty: [list, of, strings, i, am, a, list, is, remove, stop, there, list] 
Clean: [list, strings, list, remove, stop, there, list] 
+0

, но он отлично работал с другим списком! то каким должно быть решение –

+0

@JavaNerd см. мое редактирование. – Mena

+0

нет, вы не получаете мою точку зрения, пожалуйста, просмотрите мой вопрос, было сделано обновление –