2014-02-17 108 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:而在一般情况它是你的BufferedWriter试图使用结果之前flush()一个好主意。或者更好,close()吧。你甚至可以关闭你的StringWriter,尽管在这种情况下它没有什么区别,关闭你的流和作家是一个很好的习惯。

3

@Payal问题是在你的return语句

writer.toString(); 

它返回作家对象的地址。你应该做的是:

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

return strWriter.toString(); 
1

writer是一个缓冲的作家。在缓冲作家调用toString将返回的BufferedWriter类实例的字符串表示:

[email protected] 

,如果你对底层StringWriter实例调用toString你会得到你写信给作家的字符串数据。

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,edited。谢谢 –