2015-09-07 3 views
0

Привет, ребята У меня есть этот образец текстового файла, в котором имена peopel склеиваются без какого-либо промежутка между ними. Возможно ли, чтобы я помещал это в буферизованный читатель и создавал ArrayList для хранения значений в строке, а затем для разделения строк по имени.Как вывести строку ArrayList в новый файл?

детали текстовых файлов:

charles_luiharry_pinkertonarlene_purcellwayne_casanova 

Мой код:

try { 
    BufferedReader in = new BufferedReader(new FileReader(filename)); 
    String str; 

    List<String> list = new ArrayList<String>(); 
    while ((str = in.readLine()) != null) { 
     list.add(str); 
    } 
    String[] stringArr = list.toArray(new String[0]); 

    FileWriter writer = new FileWriter("new_users.txt"); 
    for (String ss : list) { 
     writer.write(ss); 
    } 
    writer.close(); 

} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} 

Ожидаемый результат:

charles_lui 

harry_pinkerton 

arlene_purcell 

wayne_casanova 

Реальный выход:

дубликат файла образца.

+0

Почему это было бы иначе? у вас есть только одна строка в вашем входном файле. – user2268997

+0

Невозможно разбить имена без какого-либо указания относительно того, где одна фамилия останавливается и начинается другое имя. – McNultyyy

+0

Основываясь на вашем комментарии к принятому ответу, это просто случай обращения с разделителями строк новой ОС? Например. имена просто ограничены '\ n', но Windows (например,« Блокнот ») выглядит так, будто все они находятся в одной строке? –

ответ

0

Просто добавьте разделитель строки рекордером:

writer.write(ss); 
writer.write(System.lineSeparator()); 

Если проблемы с вашей операционной системой, используйте System.getProperty("line.separator")

+0

вы имеете в виду «writer.write (ss +« \ n »); ? – Ulaga

+1

Спасибо, Хорди! Только то, что мне было нужно. – irlyh8coding

+1

@Ulaga, который вы помещаете в разделитель файлов, является '\ n', что неверно во всех ОС, и поскольку OP не предоставляет нам эту информацию, лучше используйте предлагаемый подход, который будет работать без проблем на любой платформе. ;) также ... concatenate 'Strings' иногда требуется, но в этом случае выглядит действительно уродливо. –

0

BufferedReader.readLine() читает и возвращает строку из входного, который заканчивается \n или \r\n. Он не может определить границы между именами в вашем входном файле. Лучше подготовьте ввод, чтобы имена находились на разных строках.

0

Человеку трудно успешно отделить фамилию с именем от имени, как вы можете ожидать от компьютера?

Предлагаемое решение -

  1. Изменить образец файла и добавить разделитель (например ';') между двумя именами.

  2. Сделайте длинную строку, объединив все строки в файле. При конкатенации удалите '\ n' или '\ r \ n' из конца строк. (Необязательно - используйте StringBuffer для повышения производительности).

  3. Разделите эту строку на «массив допустимых имен». Это можно сделать, вызвав метод split (';') в длинной строке с разделителем в качестве аргумента.

  4. Затем печать из массива.

Смежные вопросы