Похоже, вам просто нужно изменить значение line
перед его записью. Если вы хотите изменить строку, чтобы удалить все нечисловые символы, регулярное выражение - довольно простой путь. Вы можете сделать функцию для этого:
(defn numbers-only [s]
(clojure.string/replace s #"[^\d]" ""))
(numbers-only "this is 4 words")
=> "4"
Затем используйте эту функцию в вашем примере:
(str (numbers-only line) "\n")
В качестве альтернативы, вы можете map
numbers-only
превысить line-seq
, и поскольку map
и line-seq
являются ленивыми, вы получите то же самое поведение ленивый / по требованию:
(map numbers-only (line-seq rdr))
И тогда ваш doseq
останется прежним. Я бы, вероятно, выбрал этот подход, поскольку он объединяет обработку вашего «потока», а ваш цикл императив / побочный эффект касается только записи его входных данных.