Программа находит длинное слово в файле, подскажите как его можно удалить?
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;
}
}
Вот мой вариант решения. Для простоты понимания я разбил единый свой код на методы.
В методе 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();
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Реализую бинарное дерево, и нужно переопределить метод clear(), который удалит все элементы из коллекцииВопрос - правильно ли я делаю (пикча...
У меня есть Sqlite база , которую я читаю из файла AssetsВот встал вопрос как правильно обойти один момент
Подскажите пожалуйста как решить данную задачу оптимальным способом :
Мне нужно загрузить файл в arraylist и заменить определенные строки, после записать мой лист в другой файл, как это реализовать?