2015-12-14 2 views
2

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

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

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. Моя программа сначала считывает текстовый файл, а затем сохранить каждое предложение в моем текстовом файле в ArrayList предложений называемых «предложениями».

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

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

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

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

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

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

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

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

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

ответ

0

Каждый раз, когда это слово соответствует предложению, вы создаете новый экземпляр 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);          
} 
+0

почему вы добавили Струнный текст = ""; text - это имя моего TextView – user5679217

+0

Чтобы исключить исключение нулевого указателя. Если вы уже заявляете это раньше, просто удалите мой один. Если это сработает для вас .. пожалуйста. (: – febaisi

+0

Можете ли вы проверить его сейчас, я добавил весь код из своей программы – user5679217