Исключить другие слова строки в файле (Java) - PullRequest
0 голосов
/ 08 июля 2019

У меня есть метод, чтобы загрузить строку из файла и вернуть ее.

public String loadStopwords(File targetFile) throws IOException {

    File fileTo = new File(targetFile.toString());
    BufferedReader br;
    String appString = null;

    try {
            br = new BufferedReader(new FileReader(fileTo));
            String st;
                while((st=br.readLine()) != null){
                    System.out.println(st);
                    appString = st;
                }
    } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    return appString;

}

Я хочу передать эту строку в качестве аргумента другого метода плюс файл;Я хочу прочитать этот файл, исключая все слова, отличные от слов, которые я передал в строке.Например, в моем досье у меня есть [«Мой дом такой красивый и большой»], и я передаю строку [«красивый большой зеленый»], я должен сохранить новую строку [«красивый большой»].Я пытался с этим, но это не работает:

public String removeOtherWords(File targetFile, String excludingWords) {

    ArrayList<String> excludeWordsList = new ArrayList<>();
    excludeWordsList.addAll(Arrays.asList(excludingWords.split(" ")));

    ArrayList<String> wordList = new ArrayList<String>();
    try(Scanner sc = new Scanner(new FileInputStream(targetFile))){

        while(sc.hasNext()){

            for (int i = 0; i < excludeWordsList.size(); i++) {

                if (sc.toString() == excludeWordsList.get(i)) {
                    wordList.add(sc.next());
                }
            }

        }
        sc.close();
        //sc.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return wordList.toString();

}

1 Ответ

0 голосов
/ 12 июля 2019

Вы используете == для сравнения строк. Это неправильно - вы должны использовать equals(). Также вы можете реорганизовать свой код, используя функции lambdas:

public String removeOtherWords(File targetFile, String excludingWords) throws IOException {
    List<String> lines = Files.readAllLines(targetFile.toPath());
    List<String> excludingWordsList = Arrays.asList(excludingWords.split(" "));
    return lines.stream()
            .flatMap(line -> Arrays.stream(line.split(" ")))
            .filter(excludingWordsList::contains)
            .collect(Collectors.joining(" "));
}
...