Как удалить слово из файла

156
22 мая 2019, 02:40

Программа находит длинное слово в файле, подскажите как его можно удалить?

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class WordFinder {
     public static void main(String [ ] args) throws FileNotFoundException {
    new WordFinder().getLongestWord();
 }
public String getLongestWord() throws FileNotFoundException {
    String longestWord = "";
    String current;
    Scanner scan = new Scanner(new File("file.txt"));
    while (scan.hasNext()) {
        current = scan.next();
        if (current.length() > longestWord.length()) {
            longestWord = current;
        }
    }
    System.out.println(longestWord);
            return longestWord;
        }
}
Answer 1

Вот мой вариант решения. Для простоты понимания я разбил единый свой код на методы.

В методе findLongestString - мы берем имя файла, сканируем его и с помощью сравнения длины строк (if (longest.length() < currentWord.length())) находим самое длинное слово. Если таких длинных слов 2 или более - программа возвращает значение только первого большого слова, попавшегося на пути. После возврата значения return longest мы присваиваем полученное слово переменной longest в main-методе, чтобы в дальнейшем использовать его в другом методе (мог сделать через глобальную переменную вместо локальной сделать, но так не интересно было бы:) )

В методе deleteWord я беру полученное длинное слово и имя файла. Далее я создаю считывание файла и запись файла (потому что в Java я, лично, не знаю другого способа замены/удаления строк). Зачем мне нужны эти две вещи? Я считываю файл, в котором есть длинное слово и если строка не является тем словом, я записываю данные во временный файл temp.txt, если является - я пропускаю запись данной строки в файл с помощью continue. В итоге, после прочтения файла я получил 2 файла - temp.txt и test2.txt (как у меня в примере). Файл temp,txt - новый полученный файл после удаления строки, а test2.txt - старый. Что нужно дальше сделать?) Правильно, заменить один файл другим. Делаем это через tempFile.renameTo(inputFile);.

В методе printFile я просто вывожу на экран файл. Т.к. я записал эту функцию в конце - программа выведет файл test2.txt с удаленным длинным словом.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class WordFinder {
    public static void main(String[] args) {
        String filename = "test2.txt";
        WordFinder wordFinder = new WordFinder();
        String longest = wordFinder.findLongestString(filename);
        wordFinder.deleteWord(longest, filename);
        wordFinder.printFile(filename);
    }
    public String findLongestString(String filename) {
        String longest = "";
        try {
            Scanner scanner = new Scanner(new File(filename));
            while(scanner.hasNextLine()) {
                String currentWord = scanner.nextLine();
                if (longest.length() < currentWord.length()) {
                    longest = currentWord;
                }
            }
            scanner.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return longest;
    }
    public void deleteWord(String longestWord, String filename) {
        try {
            File inputFile = new File(filename);
            File tempFile = new File("temp.txt");
            BufferedReader reader = new BufferedReader(new FileReader(inputFile));
            BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
            String currentLine;
            while((currentLine = reader.readLine()) != null) {
                if(currentLine.equals(longestWord)) 
                        continue;
                writer.write(currentLine+"\n");
            }
            writer.close();
            reader.close();
            tempFile.renameTo(inputFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void printFile(String filename) {
        try {
            Scanner scanner = new Scanner(new File(filename));
            while(scanner.hasNextLine()) {
                System.out.println(scanner.nextLine());
            }
            scanner.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
READ ALSO
бинарное дерево Java, метод clear()

бинарное дерево Java, метод clear()

Реализую бинарное дерево, и нужно переопределить метод clear(), который удалит все элементы из коллекцииВопрос - правильно ли я делаю (пикча...

168
SQLite прочитать базу после очистки кэша

SQLite прочитать базу после очистки кэша

У меня есть Sqlite база , которую я читаю из файла AssetsВот встал вопрос как правильно обойти один момент

185
Как разбить массив случайным образом на m элементов ?

Как разбить массив случайным образом на m элементов ?

Подскажите пожалуйста как решить данную задачу оптимальным способом :

159
Как загрузить файл в arraylist

Как загрузить файл в arraylist

Мне нужно загрузить файл в arraylist и заменить определенные строки, после записать мой лист в другой файл, как это реализовать?

132