黑马程序员技术交流社区
标题:
关于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 是怎么添进来的
import java.io.*;
import java.util.*;
class SysInTest
{
public static void main(String[] args) throws IOException
{
InputStream in = System.in;
StringBuilder sb = new StringBuilder();
while(true)
{
int ch = in.read();
if(ch=='\r')
continue;
if(ch=='\n')
{
String s = sb.toString();
if("over".equals(s))
break;
System.out.println(s.toUpperCase());
sb.delete(0,sb.length());
}
else
{
sb.append((char)ch);
}
}
}
}
复制代码
作者:
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