2013-12-10 4 views
-1

У меня есть текстовый файл, который выглядит следующим образом:Java преобразовать текстовый файл запятыми файл

ExampleA1 
ExampleA1b 

ExampleA2 
ExampleA2b 

ExampleA3 
ExampleA3b 

Может кто-то пожалуйста, помогите мне в преобразовании его запятыми формат, как:

ExampleA1, ExampleA1b 
ExampleA2, ExampleA2b 
ExampleA3, ExampleA3b 

Спасибо за любую помощь

+0

'Может кто-нибудь помочь мне ?, Хорошо. Что вы пробовали? –

+1

[Что вы пробовали?] (Http://www.whathaveyoutried.com/) Я имею в виду * кроме того, спрашивая нас. –

+0

Взгляните на http://docs.oracle.com/javase/7/docs/api/java/io/FileReader.html для начала, попробуйте прочитать текстовый файл и распечатать его, а затем начать манипулировать им , – turbo

ответ

0

я мог бы использовать что-то вроде этого

File f = new File("temp/file.txt"); 
if (!f.exists()) { 
    return; 
} 
Scanner scanner = null; 
List<String> al = new ArrayList<String>(); 
try { 
    scanner = new Scanner(f); 
    while (scanner.hasNextLine()) { 
    String line1 = scanner.nextLine().trim(); 
    if (line1.length() == 0) { 
     continue; 
    } 
    String line2 = ""; 
    if (scanner.hasNextLine()) { 
     line2 = scanner.nextLine().trim(); 
    } 
    if (line2.trim().length() > 0) { 
     al.add(line1 + ", " + line2); 
    } else { 
     al.add(line1); 
    } 
    } 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} finally { 
    scanner.close(); 
} 
FileOutputStream fos = null; 
try { 
    fos = new FileOutputStream(f, false); 
    PrintWriter pw = new PrintWriter(fos); 
    for (String str : al) { 
    pw.println(str); 
    } 
    pw.close(); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} finally { 
    if (fos != null) { 
    try { 
     fos.close(); 
    } catch (IOException e) { 
    } 
    } 
} 

Начиная с

cat file.txt 
ExampleA1 
ExampleA1b 

ExampleA2 
ExampleA2b 

ExampleA3 
ExampleA3b 

Я получаю это с выше

ExampleA1, ExampleA1b 
ExampleA2, ExampleA2b 
ExampleA3, ExampleA3b 
0

Это кажется очень легко работать, на первый взгляд, но не так просто после более близкого взгляда :) Вот ответ:

public static void main(String[] args) { 
    try { 
     FileInputStream fin = new FileInputStream("/home/venkatesh/Desktop/test.txt"); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(fin)); 
     int data = -1; 
     int prevChar = -1; 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     do { 
      data = reader.read(); 
      if (data == -1) break; 
      if (data == '\n') { 
       if (prevChar == '\n') { 
        baos.write('\n'); 
        prevChar = 0; 
       } else { 
        prevChar = data; 
       } 
      } else { 
       if (prevChar == '\n') { 
        baos.write(','); 
        baos.write(' '); 
       } 
       baos.write(data); 
       prevChar = data; 
      } 
     } while (true); 
     System.out.println(" Written Text : \n" + new String(baos.toByteArray())); 
     reader.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Краткое описание: Здесь мы выполняем следующие операции:
1. Открытие файла через FileInpu tStream, а затем обернуть его читателем по выбору. Откройте Outpustream (я использовал ByteArrayOutputStream для простоты ведения журнала).
2. Прочитайте символ char с помощью API read() и проверите несколько условий, специфичных для конкретного приложения -
a. Если currentReadChar - это новая строка char (\ n), и ранее никакой новый признак строки не просто перешел к следующему символу (не записывайте ничего в выходной поток)
b. Если currentReadChar является символом новой строки, а предыдущий также является символом новой строки, тогда записывается один символ новой строки вместо двух, а затем указывается на следующий символ.
c. Если currentReadChar не является символом новой строки, а предыдущий является символом новой строки, тогда пишите ',' в поток перед записью текущего символа
d. Если currentReadChar не является символом новой строки, а предыдущий тоже не является символом новой строки, напишите текущий символ.
3. Закройте потоки/считыватели и используйте полученный выходной поток/строку, что хотите.



Основные допущения:
1. Там будет одна новая линия голец между ExampleA1 и ExampleA1b
2. Есть две новые символы строки между следующей группой ExampleA ...


Надеюсь, что это помогает ...

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