2016-01-16 5 views
0

У меня есть файл вопросов, который я хотел бы прочитать, и когда его чтение, я хочу, чтобы он определял вопросы из ответов и печатал их, перед каждым вопросом есть строка "#" символы, код продолжает пропускать вопрос один по какой-то причине? что мне здесь не хватает?Java readline(), пропуская вторую строку

Вот код:

 try { 
      // Open the file that is the first 
      // command line parameter 
      FileInputStream fstream = new FileInputStream(path); 
      BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
      String strLine; 
      strLine = br.readLine(); 
      System.out.println(strLine); 
      // Read File Line By Line 
      while ((strLine) != null) { 
       strLine = strLine.trim(); 

       if ((strLine.length()!=0) && (strLine.charAt(0)=='#' && strLine.charAt(1)=='#')) { 

        strLine = br.readLine(); 
         System.out.println(strLine); 
         //questions[q] = strLine; 

       } 

       strLine = br.readLine(); 
      } 

      // Close the input stream 
      fstream.close(); 
      // System.out.println(questions[0]); 

     } catch (Exception e) {// Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
     } 

text file

+0

Непонятно, что вы спрашиваете или какую проблему вы пытаетесь решить. Сначала откройте это на более мелкие части и попробуйте представить меньшую упрощенную версию проблемы, с которой вы сталкиваетесь. –

+0

Не могли бы вы изменить название вопроса на «readline(), пропустив первую строку»? Это на самом деле лучше соответствовало бы вашей проблеме :-) – thst

+0

@thst нет, потому что первая строка «##############», и это печатает, но строка после нее отсутствует. –

ответ

2

Я подозреваю, что файл, который вы читаете, находится в UTF-8 с спецификацией.

Спецификация - это код перед первым символом, который помогает определить правильное кодирование текстовых файлов.

Проблема с спецификацией заключается в том, что она невидима и мешает чтению. Текстовый файл с спецификацией может больше не содержать текстовый файл. Особенно, если вы читаете первую строчку, первый символ больше не является #, но это нечто другое, потому что это символ BOM + #.

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

BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8")); 

В противном случае, возьмите приличный текстовый редактор, например, Notepad ++ и изменить кодировку UTF-8 без BOM или кодировки ANSI (гадость).

+0

Спасибо, что это сработало! –

0

Обратите внимание, что когда вы либо ввести, если заявление в то время или нет, вы сначала сделать strLine = br.readLine();, которые перезаписывать линию, которую вы читали при инициализации strline ,

+0

Это определенно не проблема здесь, так как я печатаю ее перед циклом while! –