Заменить определенные слова в файле с заменами в другом файле - Java - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть файл ( file1.txt ), содержащий:

word word word2 word word1
word2 word word 1

Другой файл ( file2.txt ) содержит:

word1-replacement1
word2-replacement2

Мне нужен метод поиска, если слова из файла2 содержатся в файле1 и если они содержатся, замените эти слова заменой.

У меня уже есть следующее:

BufferedReader br = new BufferedReader(new FileReader("file2.txt"));
    BufferedReader br2 = new BufferedReader(new FileReader("file1.txt"));
    String line;
    String line2;


    while ((line = br.readLine()) != null) {
        String vars[] = line.split("-");
        String varname = vars[0];
        String replacement = vars[1];

        while ((line2 = br2.readLine()) != null) {
            if(line2.contains(varname)) {
                line2.replace(varname, replacement);
            }
        }
    }

Проблема с этим кодом в том, что он просто читает только первую строку файла file1.
Окончательный вывод должен выглядеть следующим образом:

word word replacement2 word replacement1
replacement2 word replacement1

Спасибо за помощь:)

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Я предлагаю сначала прочитать во втором файле в память Java и сохранить данные в качестве хранилища значений ключей в хэш-карте.Затем выполните итерацию по строкам из первого файла и сделайте все соответствующие замены.

Map<String, String> map = new HashMap<>();
String line = "";

try (BufferedReader br = new BufferedReader(new FileReader("file2.txt"))) {
    while ((line = br.readLine()) != null) {
        String[] parts = line.split("-");
        map.put(parts[0], parts[1]);
    }
}
catch (IOException e) {
    // handle exception
}

try (BufferedReader br = new BufferedReader(new FileReader("file1.txt"))) {
    while ((line = br.readLine()) != null) {
        for (Map.Entry< String, String > entry : map.entrySet()) {
            String pattern = "\\b" + entry.getKey() + "\\b";
            line = line.replaceAll(pattern, entry.getValue());

            // now record the updated line; printed to the console here for demo purposes
            System.out.println(line);
        }
    }
}
catch (IOException e) {
    // handle exception
}

Обратите внимание, что я называю String#replaceAll выше с границами слов вокруг каждого термина.Это важно, потому что, например, без границ термин word1 будет соответствовать чему-то вроде aword1term, то есть будет соответствовать word1 даже как подстрока какого-либо другого слова.

0 голосов
/ 04 февраля 2019

Вы можете начать с создания Карты замен следующим образом:

public Map<String,String> getReplacements(File file) throws FileNotFoundException {
    Map<String, String> replacementMap = new HashMap<>();
    Scanner sc = new Scanner(file);
    while(sc.hasNextLine()) {
        String line = sc.nextLine();
        String [] replacement = line.split("-");
        String from = replacement[0];
        String to = replacement[1];
        replacementMap.put(from,to);
    }
    return replacementMap;
}

А затем использовать карту для замены слов в другом файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...