2013-10-10 170 views
-2

我正在阅读来自单独文件的输入,而且我无法弄清楚如何浓缩一堆空白行,而只是打印一行。例如,如果我的输入文件有两个由14个空白行分隔的段落,则这些段落应该由一个空白行而不是14个空白行作为输出。如何将一串连续的空行压缩到一个空白行中?

+4

一些代码吗? – maksimov

+0

你有什么尝试?作为一个提示,如果你将整个文件读入一个'String'中,那么有14条空行的部分看起来就像'\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n',但应该看起来像'\ n \ n'。 – nhgrif

+1

当您读取空行时,如果上一行输入行为空白,请不要输出。请阅读下一个。 –

回答

2

在逐行阅读时,检查每一行以查看它是否为空(匹配正则表达式^\s*$line.trim().isEmpty())。当输入行为空时,设置一个布尔值,例如seenBlankLine为true。在后续的空行上,如果布尔值为true,则不要处理该行。请记住,当遇到非空白行时,将布尔值设置为false。由焦

+0

@HovercraftFullOfEels更新,谢谢。 –

0

读取字符,避免重复回车换行符

InputStream is = null; 
char c; 
int i; 

try { 
    is = new FileInputStream('/path/to/file'); 

    StringBuffer sb = new StringBuffer(); 
    while ((i = is.read()) != -1) { 
     c = (char)i; 

     if (c == '\n' || c == '\r') { 
      int length = sb.length(); 
      if (length == 0 || (length != 0 && sb.charAt(length - 1) != '\n')) { 
       sb.append(c); 
      } 
     } else { 
      sb.append(c); 
     }  
    } 
} catch (Exception e) { 
    ... 
} 
return sb.toString(); 
+0

你的是一个非常低级的解决方案。我认为更高层次的解决方案会更好,比如使用StringBuilder,Scanner和while循环,并在需要的地方调用“continue”。这样做我敢打赌,这个代码会减少60%以上,同时使它更具可读性,适应性和可调试性。另外,为什么使用StringBuffer而不是StringBuilder。哪里可能有一个可能的线程问题,这个局部变量? –

+0

@Hovercraft完整的鳗鱼:对!我只是想展示不同的东西! :) – user278064

相关问题