Прочитать текст Java-программы и в каждом слове длиннее двух символов все строчные символы заменить прописными
Как должна работать программ.
- Прочитать код "Hello word"
- Заменить символы в словах, которые длиннее 2ух, на верхний регистр.
- Записать "обработанный код" в новый файл.
Моя программа успешно обрабатывает первую строчку, и записывает ее в файл, но со 2ой строчки уже идет, что то не то.
Мой код
package OptionalTask.Task4;
import java.io.*;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class fixed {
public static void main(String[] args) {
try(FileReader reader = new FileReader("data/SomeJavaCode.txt");
BufferedReader bufferedReader = new BufferedReader(reader);
FileWriter writer = new FileWriter("data/Task4.txt");
BufferedWriter bufferedWriter = new BufferedWriter(writer)){
String line = null;
String word = null;
StringBuffer buffer = new StringBuffer();
Pattern pattern = Pattern.compile(".{2,}");
while ((line = bufferedReader.readLine()) != null){
Scanner scan = new Scanner(line);
while (scan.hasNext()) {
word = scan.next();
Matcher matcher = pattern.matcher(word);
if (matcher.matches()){
buffer.append(matcher.group().toUpperCase() + " ");
} else{
buffer.append(word + " ");
}
}
bufferedWriter.write(buffer.toString(), 0, line.length() -1);
bufferedWriter.newLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Код который считывает приложение по пути "data/SomeJavaCode.txt"
import java.util.Scanner;
public class HelloUser {
public static void main(String[] args) {
Scanner name = new Scanner(System.in);
System.out.println("Введите ваше имя: ");
String pharase = name.nextLine();
System.out.println("Доброго времени суток - " + pharase);
}
}
public // test text
public
public
Результат, который записывается в файл по пути "data/Task4.txt"
IMPORT JAVA.UTIL.SCANNER;
IMPORT JAVA.UTIL.SCANNE
IMPORT JAVA.UTIL.SCANNER; PUBLIC CLASS HELL
IMPORT JAVA.UTIL.SCANNER; PUBLIC CLASS HELLOU
IMPORT JAVA.UTIL.SCANNER; PUBLIC CLASS HELLOUSER
IMPORT JAVA.UTIL.SCANNER; PUBLIC CLASS H
IMPORT JAVA.UTIL.SCANNER; PUBLIC CLASS HELLOUSER { PUBLIC STATIC
IMPO
IMPORT JAVA.UTIL.S
IMPOR
IMPOR
Выглядит так, что приложение обработало весь изначальный файл. Привела где это требуется в верхний регистр (получается все слова длиннее двух символов). Но начинает записывать каждую новую строчку, по новой и в одну строку. Это и необходимо пофиксить.
Ответы (1 шт):
Рекомендую вам заменить StringBuffer на StringBuilder.
Дело в том, что в строке bufferedWriter.write(buffer.toString(), 0, line.length() -1); у тебя индекс (который 0), постоянно считывает с самого начала твоего StringBuffer.
Из-за этого у тебя дублируются слова.
Советую добавить переменную int offset = 0;и заменить bufferedWriter.write(buffer.toString(), 0, line.length() -1); на bufferedWriter.write(buffer.toString(), offset, (buffer.length() - offset));