黑马程序员技术交流社区

标题: 关于System.in 和 '\r'的问题! [打印本页]

作者: jingdou56    时间: 2014-4-8 19:46
标题: 关于System.in 和 '\r'的问题!
本帖最后由 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. }
复制代码




作者: TTc    时间: 2014-4-8 19:56
这是因为语句在判断是\r后又判断你键盘的输入是否是\n,你从键盘中输入的数据是adf \r sdf,在判断\r下一个字符时并不符合语句条件也就是\n,程序就接着执行else语句,然后把数据添加到s
作者: TTc    时间: 2014-4-8 20:00
这是因为回车是\r\n,语句在判断是\r后又判断你键盘的输入是否是\n,你从键盘中输入的数据是adf \r sdf,在判断\r下一个字符时并不符合语句条件也就是\n,程序就接着执行else语句,然后把数据添加到StringBuilder中,所以最终打印的结果中\r是存在的
作者: zhangbingyuan    时间: 2014-4-8 22:29
本帖最后由 zhangbingyuan 于 2014-4-8 22:38 编辑

楼主,其实这个问题很简单的,不涉及什么输入输出啊的相关问题,楼上的纯属想多了。你要知道回车符中的'\r' 和'\n'中的 '\r' 中的'\'是作为转义字符的作用而存在的,  '\r' 代表着一个字符,对应着一个唯一的ASCII码。而在你键盘录入的内容(adf \r sdf)中的\r代表的是两个字符。  所以就算是判断输入的字符,也是先判断了\,再判断r,就是这么简单,嘿嘿。
作者: 齐海宏    时间: 2014-4-10 09:01
这个问题。我前几天也遇到了,也想问一下。终于知道了。 zhangbingyuan 的回答终于明白了,。谢谢。论坛的确有用!




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