Длинные слова

  • 12
  • Недоступна
В метод main первым параметром приходит имя файла1, вторым — файла2. Файл1 содержит слова, разделенные пробелом. Записать через запятую в Файл2 слова, длина которых строго больше 6. В конце файла2 запятой не должно быть. Закрыть потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (354)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
BlackGrizzli Team
Уровень 30
вчера, 14:49
Проверка сказала ПОШЕЛ БЫ Я ))
public class Solution {
    public static void main(String[] args) throws FileNotFoundException {
        String recordFile = "";
        try (BufferedReader bufferedReader = new BufferedReader(new FileReader(args[0]));
             BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(args[1]))) {
            Pattern pt = Pattern.compile("\\b[А-яа-я]{7,}\\b");
            while (bufferedReader.ready()) {
                String line = bufferedReader.readLine();
                Matcher mt = pt.matcher(line);
                while (mt.find()) {
                    recordFile+= mt.group()+",";
                }
            }
            bufferedWriter.write(recordFile.substring(0,recordFile.lastIndexOf(",")));
        } catch (IOException ignore) {
        }
    }
}
Stas Azin Младший помощник дворника в Улица
14 ноября, 08:52
А почему после запятой пробел не нужен? Это же логично, мой мозг бунтует...
6 ноября, 11:46
Перепробовал тучу вариантов, потратил одну попытку зазря, а потом осенило)) Собираем в одну стрку нужные слова через запятую, а потому последнюю ненужную запятушку отрезаем сабстрингом. Код на 12 строк короче авторского. Profit!
Viacheslav Paninskii
Уровень 32
7 октября, 12:58
Почти как у JR, но с небольшой разницей
if (str1[i].length() > 6) {
                        list.add(str1[i] + ",");
                    }
//после полного заполнения списка
String[] last = list.get(list.size() - 1).split(",");
            list.set(list.size() - 1, last[0]);
MineJavaAcc
Уровень 39
30 сентября, 16:33
Я всегда после решения смотрю эталонный код Javarush. И тут мне кажется можно сделать чуть попроще - когда добавляем, запятую добавлять отдельным элементом: for (String str : splittedLine) { if (str.length() > 6) { output.add(str); output.add(","); } А в конце вывести в файл на 1 ячейку меньше: for (int i = 0; i < output.size() - 1; i++) { fileWriter.write(output.get(i)); } Причем валидатор говорит "ОК" на такое решение.
papsnaz
Уровень 32
4 сентября, 18:50
Приятная задачка👺
6 ноября, 11:43
Товарищ, а зачем вы в конце каждого своего изречения добавляете эту масочку? В этом есть какой-то смысл?))
Anton
Уровень 37
29 августа, 06:24
Очень легко решается через stream:
String result = reader.lines().flatMap(line -> Arrays.stream(line.split(" ")))
                              .filter(word -> word.length() > 6)
                              .collect(Collectors.joining(","));
writer.write(result);
MRamazanov System Engineer
10 августа, 12:01
Разбил голову, болеть начала...)) Из за того что в filewriter второй аргумент добавил true не принимал валидатор)))
6 ноября, 11:44
Меня тоже от этого бомбануло в одной из недавних задач)
Юрий Митрясов
Уровень 36
24 июля, 20:08
Использовал StringBuilder для формирования необходимой строки. Чтобы исключить запятую в самом конце, в файл писал через следующую версию write(String s, int off, int len):
bufferedWriter.write(strOut.toString(),0,strOut.toString().length() - 1);
Blynchik Работает в Pegas Touristik
24 июля, 12:26
Если решайте сразу в цикле while, и не знаете как убрать лишнюю запятую, я сделал так:
завел переменную n = 0;
начал читать файл в цикле while{
      разделил строку на пробел и перевод строки ^|\s
      в цикле for для всех получившихся строк{
             если длина стоки>6 {
                   если n ! = 0{
                         записываем ","
                   }
                   записываем строку
              }
       n++
       }
}
Получится так, что сначала записываем необходимое слово(в первой итерации запятая не запишется перед словом, мы поставили условие), а потом только запятую в начале следующей итерации. В последней итерации запятая не запишется.
Владимир
Уровень 31
16 августа, 21:45
У тебя ошибка, n++ надо сразу ставить после "записываем строку", а не после первого условия, иначе если первым стоит слово меньше 6 символов то запятая запишется первым символом в файл.