LinkedHashSet не может удалить повторяющиеся предложения из ArrayList

Я создаю программу для Android/Java, которая читает из текстового файла и сохраняет каждое предложение в текстовом файле в списке массивов. Затем он проверяет вхождение каждого слова в предложение и распечатывает все предложения, содержащие повторяющиеся слова.

Это код, который я использую для вывода окончательного результата:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.text4);
    text = (TextView)findViewById(R.id.info2);
    BufferedReader reader = null;

    try {
        reader = new BufferedReader(
                new InputStreamReader(getAssets().open("input3.txt")));

        String line;

        List<String> sentences = new ArrayList<String>();

        for ( String line2; (line2 = reader.readLine()) != null;) {

            for (String sentence : line2.split("(?<=[.?!\t])")) {
                sentence = sentence.trim();
                if (! sentence.isEmpty()) {
                    sentences.add(sentence);
                }                   
            }  

            String[] keys = line2.split(" ");
            String[] uniqueKeys;

            int count = 0;
            uniqueKeys = getUniqueKeys(keys);

            for(String key: uniqueKeys)
            {
                if(null == key)
                {
                    break;
                }           
                for(String s : keys)
                {
                    if(key.equals(s))
                    {
                        count++;
                    }               
                }

                if(key.equals("a") || key.equals("the")|| key.equals("is")|| key.equals("of")|| key.equals("and")|| key.equals("The") || key.equals("some") || key.equals("on") || key.equals("during") || key.equals("to") || key.equals("since") || key.equals("in") || key.equals("by") || key.equals("for") || key.equals("were") ||key.equals("--") || key.equals("in") || key.equals("as") || key.equals("that") || key.equals("may") || key.equals("can") || key.equals("without") || key.equals("You")){
                    count = 0;
                }

                if(count >1 ){

                    MyKey = key;


                    Pattern word = Pattern.compile("\\b"+key+"\\b", Pattern.CASE_INSENSITIVE);

                    //sentences is the arrayList of sentences in this program
                    LinkedHashSet<String> lhs = new LinkedHashSet<String>();
                    for (String sentence : sentences) {
                        //checks the occurance of keyword within each sentence 
                        if (word.matcher(sentence).find()) {


                            lhs.add(sentence);


                        }                                          

                    }
                    for (String sentence2 : lhs) {
                        text.append(sentence2);                                     
                    }


                }
                count=0;
            }   


        }


    } catch (IOException e) {
         Toast.makeText(getApplicationContext(),"Error reading file!",Toast.LENGTH_LONG).show();
         e.printStackTrace();
    }finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                //log the exception
            }            

        }

    }







}
  1. Моя программа сначала читает текстовый файл, а затем сохраняет каждое предложение в моем текстовом файле в массиве списка предложений, называемых «предложениями».

  2. Затем он считывает каждое слово в текстовом файле и сохраняет каждое слово, которое повторяется более одного раза, в массивеList с именем «ключ».

  3. Затем он проверяет, существует ли «ключ» в каждом предложении, и если да, то добавляет эти предложения в LinkedHashSet с именем «lhs».

  4. Затем он должен отобразить все предложения в LinkedHashSet на экране вывода.

В этом случае значения моего «ключа» - «ставка», «штаты» и «правительство».

Однако мой текстовый файл содержит следующее предложение: «Тринадцать штатов сообщили об уровне безработицы выше текущего национального уровня».

Как видите, он содержит как «состояния», так и «скорость», которые являются двумя моими ключевыми словами.

Когда я запускаю эту программу, это конкретное предложение появляется дважды на экране вывода, потому что программа ищет каждый «ключ» отдельно, поэтому она думает, что это два разных предложения.

Вот почему я использовал LinkedHashSet, чтобы предотвратить это, но он по-прежнему дважды отображает это предложение на экране вывода.

Как мне это исправить?


person user5679217    schedule 14.12.2015    source источник


Ответы (1)


Каждый раз, когда это слово совпадает с предложением, вы создаете новый экземпляр LinkedHashSet.

Попробуй это:

//sentences is the arrayList of sentences in this program
LinkedHashSet<String> lhs = new LinkedHashSet<String>();  
for (String sentence : sentences) {
    //checks the occurance of keyword within each sentence 
    if (word.matcher(sentence).find()) {
        lhs.add(sentence);
        }
}

//displays the final result on the output window
String text = "";
for (String sentence2 : lhs) {
    text.append(sentence2);                                     
}
person febaisi    schedule 14.12.2015
comment
почему вы добавили String text = ; text - это имя моего TextView - person user5679217; 14.12.2015
comment
Чтобы избежать исключения нулевого указателя. Если вы уже заявляли об этом раньше.. просто удалите мой.. Если это работает для вас.. пожалуйста.. проголосуйте за! (: - person febaisi; 14.12.2015
comment
Не могли бы вы проверить это сейчас, я добавил весь код из моей программы - person user5679217; 14.12.2015
comment
Это ошибка сборки? Ошибка выполнения? Опубликуйте свое сомнение. - person febaisi; 15.12.2015
comment
Когда я запускаю эту программу выше, она отображает предложения, содержащие ключ, как я объяснил в своем вопросе. Однако некоторые предложения, подобные приведенному выше примеру, содержат 2 ключевых слова. Поэтому программа идентифицирует это конкретное предложение как 2 отдельных предложения. Вот почему я попытался использовать LinkedHashSet, чтобы предотвратить отображение повторяющихся предложений. - person user5679217; 15.12.2015
comment
Теперь я обновил свой код вашим кодом (проверьте вопрос), но он по-прежнему дает тот же результат. - person user5679217; 15.12.2015