Я строю программу 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
}
}
}
}
Моя программа сначала считывает текстовый файл, а затем сохранить каждое предложение в моем текстовом файле в ArrayList предложений называемых «предложениями».
Затем он считывает каждое слово в текстовом файле и хранит каждое слово, которое повторяется более одного раза в списке arrayList, называемом «ключ».
Затем он проверяет, существует ли «ключ» в каждом предложении, и если это так, он добавляет эти предложения в LinkedHashSet, называемый «lhs».
Затем он должен отображать все предложения в LinkedHashSet на экране вывода.
В связи с этим, значением моего «ключ» является «скоростью», «государство» и «правительство»
Однако мой текстовый файл содержит следующую фразу: «Тринадцать государств сообщили уровень безработицы выше нынешний национальный курс ».
Как вы можете видеть, он содержит как «состояния», так и «курс», которые являются двумя из моих ключевых слов.
Когда я запускаю эту программу, это специальное предложение появляется дважды на экране вывода, потому что программа ищет каждый «ключ» отдельно, поэтому думает, что это два разных предложения.
Вот почему я использовал LinkedHashSet для предотвращения этого, но он все еще отображает это предложение дважды на экране вывода.
Как это исправить?
почему вы добавили Струнный текст = ""; text - это имя моего TextView – user5679217
Чтобы исключить исключение нулевого указателя. Если вы уже заявляете это раньше, просто удалите мой один. Если это сработает для вас .. пожалуйста. (: – febaisi
Можете ли вы проверить его сейчас, я добавил весь код из своей программы – user5679217