A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清心玉质 中级黑马   /  2013-8-19 17:48  /  1156 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 清心玉质 于 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();
  }
  
}

}

5 个回复

倒序浏览
本帖最后由 白堇翎 于 2013-8-19 18:11 编辑

把while的循环条件改成line = bur.readLine() != null
在循环里面弄个String来记录line的值
如果想高效并且少创建对象就用StringBuilder来记录,但是记得循环一次就清空一次
回复 使用道具 举报
重复了,编辑掉
回复 使用道具 举报
本帖最后由 清心玉质 于 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:23 编辑
清心玉质 发表于 2013-8-19 18:12
但是会把输入的第一串落下唉,比如 输入三行,第一行不会存到set中的。 ...

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


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

结果只打印到第十行

图三 修改后的源文件



回复 使用道具 举报
都是高手啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马