Изменение строки в файле

264
16 ноября 2017, 02:39

Ищу в файле совпадение с введенной строкой.дальше нужно найденную строку изменить на введенную для замены. Поиск сделал так:

private void handleButtonAction3(ActionEvent event) throws FileNotFoundException, IOException {
     String searchWord = scrfield.getText(); 
     String changeWord = chngfield.getText();
     byte[] content;
    try (FileInputStream fis = new FileInputStream(file);) {
        content = new byte[fis.available()];
        fis.read(content);
    }
    String[] lines = new String(content).split("\n"); 
    int i = 1;
    for (String line : lines) {
        String[] words = line.split(" ");
        int j = 1;
        for (String word : words) {
            if (word.equalsIgnoreCase(searchWord)) {
                ansarea.appendText("Found: "+word+"\n");
               //замена
                ansarea.appendText("Replaced successfully.");
                find = true;
            }
            j++;
        }
        i++;
    }if(find == false) ansarea.appendText("Совпадений не найдено! \n Nothing to change!");
}
Answer 1
private void handleButtonAction3(ActionEvent event) throws IOException {
    String searchWord = scrfield.getText();
    String changeWord = chngfield.getText();
    StringBuilder sb = new StringBuilder();
    try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) {
        String strLine;
        while ((strLine = br.readLine()) != null) {
            sb.append(strLine.replace(searchWord, changeWord)).append("\r\n");
        }
    }
    try (FileWriter fileWriter = new FileWriter(file)) {
        fileWriter.write(sb.toString());
    }
}
Answer 2

Есть отличный метод String.replace() он вам поможет если заменить нужно первую найденную подстроку.

Если искомых подстрок много и заменить надо все то можно использовать String.replaceAll()

В вашем случае, если важен регистр и просто дополнив ваш код можно так

for (String line : lines) {
    String[] words = line.split(" ");
    for (int i = 0; i<words.length; i++) {
        if (words[i].equalsIgnoreCase(searchWord)) {
            ansarea.appendText("Found: "+word+"\n");
           //замена
            words[i] = changeWord;
            ansarea.appendText("Replaced successfully.");
            find = true;
        }
    }
}
READ ALSO
Обёртка для примитива Boolean как объект

Обёртка для примитива Boolean как объект

Возможно ли заставить обёртку для примитива Boolean вести себя как объект?

255
Преобразовать XSSFWorkbook в SXSSFWorkbook

Преобразовать XSSFWorkbook в SXSSFWorkbook

У меня есть метод для записи данный в эксель файлОн при больших значениях падает с ошибкой - нехватка памяти

355
Несколько реализаций для одного класса

Несколько реализаций для одного класса

Для android существует такая вещь как ProductFlavorsХочется получиться тоже самое и для простой java и в итоге получить jar'ник

248