黑马程序员技术交流社区

标题: "over".equals()问题,老毕视频22天 [打印本页]

作者: 阿温    时间: 2014-8-4 09:39
标题: "over".equals()问题,老毕视频22天
  1. byte[] buf=new byte[1024];
  2.                 InputStream in=System.in;
  3.                 String s;
  4.                 int ch;
  5.                 int point=0;
  6.                
  7.                 while((ch=in.read())!=-1)
  8.                 {
  9.                         if(ch=='\r')continue;
  10.                         if(ch=='\n')
  11.                         {
  12.                                 while(point<1024)buf[point++]=0;
  13.                                 s=new String(buf);
  14.                                 if("over".equals(s))break;
  15.                                 System.out.println(s.toUpperCase());
  16.                                 point=0;
  17.                         }
  18.                         else
  19.                         {
  20.                                 buf[point]=(byte)ch;
  21.                                 point++;
  22.                         }
  23.                 }
复制代码

为毛"over".equals(s)那句不是true啊,总退不出去
作者: 贾浩田    时间: 2014-8-4 11:23
楼主写的和毕老师的不一样啊,逻辑判断不一样,你这个应该实现不了
作者: 李彦来    时间: 2014-8-4 11:52
你定义buf缓冲区是1024字节的
所以输出以下s的长度发现
System.out.println(s.length());
s的长度为1024,over 和一个1024长度的over怎么会相等呢?


作者: 刘高峰    时间: 2014-8-4 11:58
用BufferedReader直接读一行不是更好吗
作者: yueyouqiang    时间: 2014-8-4 17:40
以上三楼说的都有理
作者: zeus00456    时间: 2014-8-4 19:12
2楼说的就是lz的病根
楼主的这种写法比较奇葩,今后实际开发可能不会出现这种写法的读取
另外,将 s=new String(buf);一句换成
s = new String(buf).split("0+")[0];
可以不安全的达到目的
作者: 阿温    时间: 2014-8-4 21:57
李彦来 发表于 2014-8-4 11:52
你定义buf缓冲区是1024字节的
所以输出以下s的长度发现
System.out.println(s.length());

但是我已经使用构造转化了呀,这应该没关系
作者: 阿温    时间: 2014-8-4 21:58
贾浩田 发表于 2014-8-4 11:23
楼主写的和毕老师的不一样啊,逻辑判断不一样,你这个应该实现不了

这个是毕老师的作业,使用数组完成,可以实现,但是就是不能退出
作者: 阿温    时间: 2014-8-4 22:00
zeus00456 发表于 2014-8-4 19:12
2楼说的就是lz的病根
楼主的这种写法比较奇葩,今后实际开发可能不会出现这种写法的读取
另外,将 s=new St ...

试了一下,还是不行啊,输入over输出OVER.................
作者: 李彦来    时间: 2014-8-4 22:43
阿温 发表于 2014-8-4 21:57
但是我已经使用构造转化了呀,这应该没关系

我又细看了看,你的point没有起任何作用啊
你这样改一下
s=new String(buf,0,point);//需要把字符串赋给s后再进行重构
while(point<1024)
        buf[point++]=0;
if("over".equals(s))
        break;
作者: tommy    时间: 2014-8-5 02:45
学习下1!!!
作者: 阿温    时间: 2014-8-5 07:58
刘高峰 发表于 2014-8-4 11:58
用BufferedReader直接读一行不是更好吗

我知道,这个是那节课的作业
作者: 阿温    时间: 2014-8-5 08:02
李彦来 发表于 2014-8-4 22:43
我又细看了看,你的point没有起任何作用啊
你这样改一下
s=new String(buf,0,point);//需要把字符串赋给s ...

谢谢,明白了,这么写的话while就不用了,谢谢
作者: 王石    时间: 2014-8-5 21:08
你输入over 就退出了
作者: 喜爱    时间: 2014-8-6 09:09
过来学习一下!




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