Как с помощью StringBuilder и BufferedReader добавить запятые после каждого слова в текстовом файле и создать строку?

У меня есть список имен генов в текстовом файле, которые находятся в одном столбце. Я хотел бы создать строку всех имен генов, разделенных запятыми. Я использовал другой поток, чтобы помочь мне добраться до этого, но я продолжаю получать две запятые между каждым именем. Похоже, он добавляет запятую до и после каждого имени. Любое руководство будет оценено! Фрагмент кода ниже!

      File file = new File ("/Users/Maddy/Desktop/genelist.txt");
                  StringBuilder line = new StringBuilder();
                  BufferedReader reader = null;

            try {
                reader = new BufferedReader (new FileReader(file));
                String text = null;

                while ((text = reader.readLine()) !=null) {
                     line.append(text);
                    line.append(System.getProperty ("line.separator"));


             //line.append(text);
            //line.append(", ");
                }
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                finally 
               {
                try {
                    if (reader !=null){
                        reader.close();
                }
                }
                catch (IOException e) 
                {
                  e.printStackTrace();
                }
                }
            System.out.println(line.toString());
            String _input= new String(line.toString());

               }

person Maddy    schedule 21.04.2015    source источник
comment
Вы закомментировали line.append(", ");, поэтому я не думаю, что этот код где-либо добавляет запятые. Не вставляйте сюда такой код, он явно не делает того, что вы утверждаете.   -  person Kayaman    schedule 21.04.2015
comment
В чем проблема с вашим кодом?   -  person Jens    schedule 21.04.2015
comment
Извините, Каяман, это мой первый вопрос о переполнении стека. Я прокомментировал это в своих попытках исправить это.   -  person Maddy    schedule 21.04.2015


Ответы (5)


Избавьтесь от всего этого:

 line.append(text);
 line.append(System.getProperty ("line.separator"));


 //line.append(text);
 //line.append(", ");

И замените его следующим:

 line.append(text + ",");

Кроме того, было бы лучше изменить вашу переменную text на:

String text = "";

Мне не нравится создавать объект String null. Это не очень хорошая практика.

person A.Sharma    schedule 21.04.2015
comment
Большое спасибо! Я пытался добавить запятую отдельно. Это исправило это! - person Maddy; 21.04.2015
comment
Потрясающий. Рад, что смог помочь. Не могли бы вы пометить это как принятый ответ, пожалуйста (просто нажмите на галочку рядом с моим ответом)? - person A.Sharma; 21.04.2015

вот еще один способ сделать это, используя Apache commons

List<String> slist = new ArrayList<String> ();
StringBuilder rString = new StringBuilder();
while ((text = reader.readLine()) !=null) {
           sList.add(text);     
}
String fullString = StringUtils.join(slist, ',');
person Bhargav Modi    schedule 21.04.2015
comment
Или StringJoiner в Java 8 - person MadProgrammer; 21.04.2015

Вы можете использовать Java 8 java.util.StringJoiner:

    StringJoiner j = new StringJoiner(",");
    for (String line; (line = reader.readLine()) != null;) {
        j.add(line);
    }
    String fullString = j.toString();
person Evgeniy Dorofeev    schedule 21.04.2015

Есть пара простых способов...

Если вы получаете весь файл как одну большую строку (скажем, используя apache commons-io), вы можете сделать это:

String csv = rawString.replaceAll("(?ms)$.*?^", ", ");

Или, если у вас есть файл как List<String>:

List<String> lines;
String csv = lines.stream().collect(Collectors.joining(", "));
person Bohemian♦    schedule 21.04.2015

Может быть, это поможет вам.

StringBuilder builder = new StringBuilder();
    int count = 0;
    List<String> list = Files.readAllLines(Paths.get("C:","Users/Maddy/Desktop/genelist.txt"));
    for (String line : list) {
        ++count;
        builder.append(line.trim());
        if (count != list.size()) {
            builder.append(",");
        }
    }
    System.out.println(builder.toString());
person Sahil Jain    schedule 21.04.2015