黑马程序员技术交流社区

标题: 急求解 [打印本页]

作者: 清心玉质    时间: 2013-8-19 17:48
标题: 急求解
本帖最后由 清心玉质 于 2013-8-19 18:20 编辑

从键盘读取数据,当输入end时结束,可是却将结束标记页作为输入的数据存储了,如果才能不存出结束标记呢?
public class TreeSetDemo {
public static void main(String[] args) {
  // TODO Auto-generated method stub
  BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));
  
  Set<String> li = new TreeSet<String>();
  
  String line = "";
  
   while (!line.equals(null))
   {
    if(line.equals("end"))
      break;
    try {
     line = bur.readLine();
     
     
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    li.add(line);
   
   
    }
   System.out.println(li.toString());
  try {
   bur.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
}

}

作者: 白堇翎    时间: 2013-8-19 18:04
本帖最后由 白堇翎 于 2013-8-19 18:11 编辑

把while的循环条件改成line = bur.readLine() != null
在循环里面弄个String来记录line的值
如果想高效并且少创建对象就用StringBuilder来记录,但是记得循环一次就清空一次

作者: 白堇翎    时间: 2013-8-19 18:05
重复了,编辑掉
作者: 清心玉质    时间: 2013-8-19 18:12
本帖最后由 清心玉质 于 2013-8-19 18:18 编辑
白堇翎 发表于 2013-8-19 18:04
把while的循环条件改成line = bur.readLine() != null
在循环里面弄个String来记录line的值
如果想高效并且 ...


但是会把输入的第一串落下唉,比如 输入三行,第一行不会存到set中的。、
在你的启发下,我想应该把if判断放在读取后,
line = bur.readLine();
     if(line.equals("end"))
      break;

这样输出是对的。

非常感谢!!

作者: 白堇翎    时间: 2013-8-19 18:18
本帖最后由 白堇翎 于 2013-8-19 18:23 编辑
清心玉质 发表于 2013-8-19 18:12
但是会把输入的第一串落下唉,比如 输入三行,第一行不会存到set中的。 ...

试试看直接在buf里加FileReader 反正只能打印文本文件 你弄个转换流也没意思...
我测试是没问题的啊..图一 不加end的文本,可以正常打印


图二 在文本中某一行加上end

结果只打印到第十行

图三 修改后的源文件




作者: 张百振    时间: 2014-5-15 15:04
都是高手啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2