2014-02-17 2 views
1

Этот метод не возвращает допустимую строку. Какая может быть причина?Хранение в строке

static BufferedWriter writer = null; 
static int maxlines = 100; 
public static String getTrimmedResponse(BufferedReader b) 
{ 

    try { 

     int count = 0; 
     writer = new BufferedWriter(new StringWriter()); 

     for (String line; (line = b.readLine()) != null;) { 
      if (count++ % maxlines == 0) 


      line = line.replaceAll("\\n", ""); 

      String trimmedLine = line.trim(); 
      if (trimmedLine.charAt(trimmedLine.length() - 1) == '>') 
       writer.append(trimmedLine); 
      else  
      writer.write(line); 
      writer.newLine(); 
     } 



    } catch (IOException e) { 
     e.printStackTrace(); 
     Log.i("texception", e+""); 
    } 
    return writer.toString(); 

}

+2

Было бы трудно сделать ваши отступа и блоки кода более запутанными. – Bathsheba

ответ

2

Причина заключается в том, что вы пытаетесь вывести BufferedWriter в виде строки, а не StringWriter он заворачивает. Правильная идиома выглядит следующим образом:

StringWriter sw = new StringWriter(); 
BufferedWriter writer = new BufferedWriter(sw); 
... do your writing into writer ... 
return sw.toString(); 

P.S .: А вообще это хорошая идея, чтобы flush() ваш BufferedWriter, прежде чем пытаться использовать результат. Или еще лучше, close() это. Вы даже можете закрыть свой StringWriter, даже если это не имеет никакого значения в этом случае, закрытие ваших потоков и писателей - хорошая привычка.

3

@Payal Проблема в вашем возвращении заявления

writer.toString(); 

она возвращается адрес объекта писателя. что вы должны сделать, это:

StringWriter strWriter = new StringWriter(); 
writer = new BufferedWriter(strWriter); 

и

return strWriter.toString(); 
1

writer является буферном писателем. Вызов toString на забуференном писатель возвращает строковое представление экземпляра класса BufferedWriter:

[email protected] 

Вы получите строку данных, которые вы написали автору, если вы звоните toString на подстилающей StringWriter экземпляра.

3

Используйте StringWriter, чтобы получить ответ и не забудьте слить.

Вот ваш метод с некоторым соответствующим форматированием:

static BufferedWriter writer = null; 

public static String getTrimmedResponse(BufferedReader b) 
{ 
    StringWriter sw = new StringWriter(); 
    writer = new BufferedWriter(sw); 
    int count = 0; 

    try { 

     for (String line; (line = b.readLine()) != null;) { 
      if (count++ % maxlines == 0) { 
       line = line.replaceAll("\\n", ""); 
      } 

      String trimmedLine = line.trim(); 
      if (trimmedLine.charAt(trimmedLine.length() - 1) == '>') { 
       writer.append(trimmedLine); 
      } else { 
       writer.write(line); 
       writer.newLine(); 
      } 
     } 

     //writer.flush(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
        Log.i("texception", e+""); 
    } finally { 
     try { 
          // close flushes before closing 
      writer.close(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return sw.toString(); 
} 
+1

+1 для упоминания промывки. (Хотя вам действительно не нужны отдельные 'flush()' и 'close()', но это определенно не повредит.) – biziclop

+0

True, отредактирован. спасибо –

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