2015-04-21 4 views
4

У меня есть список имен генов в текстовом файле, который находится в одном столбце. Я хотел бы создать String всех имен генов, разделенных запятыми. Я использовал другой поток, чтобы помочь мне зайти так далеко, но я продолжаю получать две запятые между именами. Похоже, что это добавление запятой до и после каждого имени. Любое руководство будет оценено! Ниже приведен фрагмент кода!Использование 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()); 

       } 
+0

Вы прокомментировали 'line.append (", ");' поэтому я не думаю, что этот код добавляет какие-либо запятые в любом месте. Не просто вставляйте код, как здесь, он явно не делает того, что вы утверждаете. – Kayaman

+1

В чем проблема с кодом? – Jens

+0

он должен работать. – Abhishek

ответ

1

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

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


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

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

line.append(text + ","); 

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

String text = ""; 

Я не хотел, чтобы сделать объект String, null. Это не хорошая практика.

+0

Большое вам спасибо! Я пытался добавить запятую отдельно. Это исправлено! – Maddy

+0

Удивительный. Рад, что смог помочь. Не могли бы вы отметить его как принятый ответ (просто нажмите галочку рядом с моим ответом)? –

+0

Да! Просто сделал это. – Maddy

2

здесь еще один способ сделать это с помощью 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, ','); 
+2

Или StringJoiner в Java 8 – MadProgrammer

+0

@MadProgrammer да вы можете использовать это тоже !!! :) –

+0

@ Мадди, если это помогло вам пометить его как принятое, и, если возможно, поправить его :) –

0

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

StringJoiner j = new StringJoiner(","); 
    for (String line; (line = reader.readLine()) != null;) { 
     j.add(line); 
    } 
    String fullString = j.toString(); 
0

Есть несколько простых способов ...

Если вы получаете весь файл в качестве одной большой строки (скажем, с помощью Apache Обще-Io), вы можете сделать это:

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

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

List<String> lines; 
String csv = lines.stream().collect(Collectors.joining(", ")); 
0

Возможно, это поможет вам.

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()); 
Смежные вопросы