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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jingdou56 中级黑马   /  2014-4-8 19:46  /  1046 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jingdou56 于 2014-4-8 22:40 编辑

今天学习流,有一个练习是 键盘录入一行字符,回车后,打印刚刚输入的字符!
中间判断回车符是用 '\r' 和'\n‘来判读是否敲了回车!

if(ch=='\r')
         continue;
判断如果是 '\r' , continue,没有将 '\r'存到缓冲区或者其他地方,
但是,让输入的字符中有 \r 时,比如(adf \r sdf)却也打印出来了,而没有漏掉!
不明白这个字符串中的 \r和 回车中的\r有什么区别!
补充:
可能我之前问的不太明白!
我认为,第一次读 \r 时,没进行append操作,直接 continue了,下次循环时不应该读的是下一个字符 s吗,这次else 添加的不应该是s吗? \r 是怎么添进来的



  1. import        java.io.*;
  2. import        java.util.*;

  3. class        SysInTest
  4. {
  5.         public static void main(String[] args)        throws        IOException
  6.         {
  7.                 InputStream in = System.in;
  8.                 StringBuilder sb = new StringBuilder();

  9.                 while(true)
  10.                 {
  11.                         int ch = in.read();
  12.                         if(ch=='\r')
  13.                                 continue;
  14.                         if(ch=='\n')
  15.                         {
  16.                                 String s = sb.toString();
  17.                                 if("over".equals(s))
  18.                                         break;
  19.                                 System.out.println(s.toUpperCase());
  20.                                 sb.delete(0,sb.length());
  21.                         }
  22.                         else
  23.                         {
  24.                                 sb.append((char)ch);
  25.                         }
  26.                 }
  27.         }
  28. }
复制代码



评分

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

查看全部评分

4 个回复

倒序浏览
这是因为语句在判断是\r后又判断你键盘的输入是否是\n,你从键盘中输入的数据是adf \r sdf,在判断\r下一个字符时并不符合语句条件也就是\n,程序就接着执行else语句,然后把数据添加到s

评分

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

查看全部评分

回复 使用道具 举报
这是因为回车是\r\n,语句在判断是\r后又判断你键盘的输入是否是\n,你从键盘中输入的数据是adf \r sdf,在判断\r下一个字符时并不符合语句条件也就是\n,程序就接着执行else语句,然后把数据添加到StringBuilder中,所以最终打印的结果中\r是存在的

评分

参与人数 1黑马币 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 zhangbingyuan 于 2014-4-8 22:38 编辑

楼主,其实这个问题很简单的,不涉及什么输入输出啊的相关问题,楼上的纯属想多了。你要知道回车符中的'\r' 和'\n'中的 '\r' 中的'\'是作为转义字符的作用而存在的,  '\r' 代表着一个字符,对应着一个唯一的ASCII码。而在你键盘录入的内容(adf \r sdf)中的\r代表的是两个字符。  所以就算是判断输入的字符,也是先判断了\,再判断r,就是这么简单,嘿嘿。
回复 使用道具 举报
这个问题。我前几天也遇到了,也想问一下。终于知道了。 zhangbingyuan 的回答终于明白了,。谢谢。论坛的确有用!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马