Можно ли соединить два цикла «пока», чтобы получить ответ?Джава - PullRequest
0 голосов
/ 23 мая 2018

Сначала я хочу прочитать строки из файла, переписать текст в другой файл

File dir = new File("C:/Users/PC/workspace/uplo/");

Файл, который я получил:

   String source = dir.getCanonicalPath() + File.separator + "Output.txt";

Файл, в который я хочу записать:

   String dest = dir.getCanonicalPath() + File.separator + "Final.txt";

   File fin = new File(source);
   FileInputStream fis = new FileInputStream(fin);
   BufferedReader in = new BufferedReader(new InputStreamReader(fis, "UTF-8"));

   OutputStreamWriter fstream = new OutputStreamWriter(new FileOutputStream(dest, true), "UTF-8");

   BufferedWriter out = new BufferedWriter(fstream);

Цикл перезаписи содержимого в новый файл Final.txt:

   String aLine = null;
   while ((aLine = in.readLine()) != null) {

Я хочу поставить этот цикл для удаления дубликатов из файла, но, к сожалению, я не знаю, каксделай это ...

   String regex = "\\b(\\w+)(\\s+\\1\\b)+";
   Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

   Matcher m = p.matcher(aLine);
   while (m.find()) {
        aLine = aLine.replaceAll(m.group(), m.group(1));
    }

   out.write(aLine);
   out.newLine();
   }

       in.close();
       out.close();

Может ли кто-нибудь помочь мне с этим?Я делаю свою домашнюю работу и не могу объединить ее вместе :)

Например, я хотел бы переписать текст:

   Hello hello hello my name name Name is Arthur and I live in in Lithuania.

Кому:

   Hello my name is Arthur and I live in Lithuania.

1 Ответ

0 голосов
/ 23 мая 2018

Я только что запустил твой код, и он работал нормально для меня.Возможно, я бы немного улучшил регулярное выражение, чтобы включить другие слова, не принятые в текущей реализации, например, слова с апострофами, такие как «не», «не будет» и т. Д.

Но это, вероятно, небольшое делоЯ с успехом попробовал следующее:

String regex = "\\b((\\w|\\p{Punct})+)(\\s+\\1\\b)+";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

try(BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out))) {
    try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in))) {
        String aLine;
        while ((aLine = in.readLine()) != null) {
            Matcher m = p.matcher(aLine);
            while (m.find()) {
                aLine = aLine.replaceAll(m.group(), m.group(1));
            }
            out.write(aLine);
            out.newLine();
            out.flush();
        }
    }
}

Я предоставляю ввод "Не волнуйтесь, будьте счастливы, счастливы!"и я отвечаю: «Не волнуйся, будь счастлив!»

Я не уверен, поможет ли этот пример вообще твоему вопросу, так как мне не ясно, где именно у тебя возникают проблемы, иваш оригинальный код, кажется, в порядке.

...