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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© XinWen 中级黑马   /  2014-4-29 12:10  /  1036 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package day29;

  2. import java.io.IOException;
  3. import java.io.InputStream;

  4. public class INDemo {

  5.         public static void main(String[] args) {
  6.                 // 定义 流 引用
  7.                 InputStream _InputStream = null;
  8.                 //每次读入的数据
  9.                 int _Ch = 0;
  10.                 //缓冲区
  11.                 StringBuilder _Buff = new StringBuilder();
  12.                
  13.                 try{
  14.                         _InputStream = System.in;
  15.                        
  16.                         while(true){
  17.                                 _Ch = _InputStream.read();
  18.                                 if( ((char)_Ch) == '\r')
  19.                                         continue;
  20.                                 if( ((char)_Ch) == '\n' ){
  21.                                        
  22.                                         if(_Buff.toString().equals("over"))
  23.                                                 return;
  24.                                        
  25.                                         System.out.println(_Buff.toString());
  26.                                         _Buff.delete(0, _Buff.length());
  27.                                 }
  28.                                
  29.                                 _Buff.append((char)_Ch);
  30.                         }
  31.                        
  32.                 }catch(IOException e){
  33.                        
  34.                 }
  35.         }

  36. }
复制代码
在输入 over 的时候,第一次可以成功结束,但是如果前面输入了其他字符,就不管用了

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 今生无憾 于 2014-4-29 13:11 编辑

因为你先输入其他字符后,换行会有换行的空字符串出现。。所以与 over 字符匹配时总是false。  
  if(_Buff.toString().trim().equals("over"))
                                                return;      去掉换行空格再比较。就OK了

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
  1. import java.io.IOException;
  2. import java.io.InputStream;

  3. public class INDemo {

  4.         public static void main(String[] args) {
  5.                 // 定义 流 引用
  6.                 InputStream _InputStream = null;
  7.                 //每次读入的数据
  8.                 int _Ch = 0;
  9.                 //缓冲区
  10.                 StringBuilder _Buff = new StringBuilder();
  11.                
  12.                 try{
  13.                         _InputStream = System.in;
  14.                        
  15.                         while(true){
  16.                                 _Ch = _InputStream.read();
  17.                                 if( _Ch == '\r')
  18.                                         continue;
  19.                                 if( _Ch == '\n' ){
  20.                                          String str =_Buff.toString();
  21.                                         if("over".equals(str))
  22.                                                break;
  23.                                        
  24.                                         System.out.println(str);
  25.                                         _Buff.delete(0, _Buff.length());
  26.                                 }
  27.                                 else
  28.                                 _Buff.append((char)_Ch);
  29.                         }
  30.                        
  31.                 }catch(IOException e){
  32.                        e.printStackTrace();
  33.                 }
  34.         }

  35. }
复制代码

解决了,没问题了
回复 使用道具 举报
楼主你好 :
    根据你写的代码 我加了一句话: continue;
  
  1. public static void main(String[] args) {
  2.      
  3.              // 定义 流 引用
  4.                             InputStream _InputStream = null;
  5.                             //每次读入的数据
  6.                             int _Ch = 0;
  7.                             //缓冲区
  8.                             StringBuilder _Buff = new StringBuilder();
  9.                             
  10.                             try{
  11.                                     _InputStream = System.in;
  12.                                    
  13.                                     while(true){
  14.                                             _Ch = _InputStream.read();
  15.                                             if( ((char)_Ch) == '\r')
  16.                                                     continue;
  17.                                             if( ((char)_Ch) == '\n' ){
  18.                                                     
  19.                                                     if(_Buff.toString().equals("over")){
  20.                                                             return;
  21.                                                     }
  22.                                                     System.out.println(_Buff.toString());
  23.                                                     _Buff.delete(0, _Buff.length());
  24.                                                     continue;
  25.                                             }
  26.                                             _Buff.append((char)_Ch);
  27.                                     }
  28.                                    
  29.                             }catch(IOException e){
  30.                                    
  31.                             }
  32.                     }
复制代码


  因为你每次读取字符\n 后 又给_Buff执行  _Buff.append((char)_Ch); , 加入了字符\n  所以会有换行。  也就不能.equals("over") 了   。。    不知道我的 解释你能懂不。。。。

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
  1. while(true){
  2.                             _Ch = _InputStream.read();
  3.                             if( ((char)_Ch) == '\r')
  4.                                     continue;
  5.                             if( ((char)_Ch) == '\n' ){
  6.                                     
  7.                                     if(_Buff.toString().equals("over"))
  8.                                             return;
  9.                                     
  10.                                     System.out.println(_Buff.toString());
  11.                                     _Buff.delete(0, _Buff.length());
  12.                                     continue;  //[color=Red]加个continue就OK了[/color]
  13.                             }
  14.                            
  15.                             _Buff.append((char)_Ch);
  16.                         }
复制代码
回复 使用道具 举报

太 感谢了 ,自己  琢磨了 半天
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马