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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 燕国庆 高级黑马   /  2012-9-23 14:12  /  2564 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class HuanHang
{
public static void main(String[] args)
{
  System.out.println("123\n456");                     
  System.out.println("--------------------------");
  System.out.println("123\r\n456");
  System.out.println("--------------------------");
  System.out.println("123\r456");
}
}
第一个输出语句与第三个输出语句有什么不同?

第五个输出语句是什么意思?为什么输出的是456 那?,求帮解释,谢谢!!!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
class HuanHang
{
public static void main(String[] args)
{
  System.out.println("123\n456");                     
  System.out.println("--------------------------");
  System.out.println("123\r\n456");
  System.out.println("--------------------------");
  System.out.println("123\r456");
}
}
第一个输出语句与第三个输出语句有什么不同?   第一句和第三句都是回车换行
第五个输出语句是什么意思?为什么输出的是456 那?,求帮解释,谢谢!!!  这句不是456 是 123
456


打印结果123
456
--------------------------
123
456
--------------------------
123
456
回复 使用道具 举报
\n 回车 \r 换行  在java中使用这两个转义字符的时候 "\n\r"表示回车并换行与"\r\n"一样, 要想实现通过转义字符的换行或者是回车, 要把二者一起使用,单独的使用"\n"或"\r"是完全无意义的。
回复 使用道具 举报
可以给你看看换行的代码
class SystemIn
{
        public static void main(String[] args)throws IOException
        {
                InputStream in=System.in;//因为System.in返回值就是InputStream
                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);
                }
               
        }
}
回复 使用道具 举报
本帖最后由 燕国庆 于 2012-9-23 16:16 编辑
尤圣回 发表于 2012-9-23 14:34
class HuanHang
{
public static void main(String[] args)


D:\javaprogram1\day02>java HuanH
123
456
--------------------------
123
456
--------------------------
456最后一个输出语句是456,不是123 456呀 在我的机器上运行,说句实话我还不明白,哎




1
回复 使用道具 举报
很奇怪,试了下在eclipse下和cmd下执行的结果是不一样的


应该是eclipse和cmd对 \r 的处理不一样吧
回复 使用道具 举报
  1. 123
  2. 456
  3. --------------------------
  4. 123
  5. 456
  6. --------------------------
  7. 123
  8. 456
  9. \r回车  \n换行 编译器不同,结果不同
复制代码
回复 使用道具 举报
呵呵 楼主不用着急,不是你机器的问题哦 !虽然我不知道这是什么原因,也想同求下哪位高手可以解释这个现象!
而且我试过楼主的代码,还发现了一个新现象,诧异不已,楼主试试这段代码:
  1. class HuanHang
  2. {
  3. public static void main(String[] args)
  4. {
  5.   System.out.println("123\n456");                     
  6.   System.out.println("--------------------------");
  7.   System.out.println("123\r\n456");
  8.   System.out.println("--------------------------");
  9.   System.out.println("   123\r456");
  10. }
  11. }
复制代码
仅仅是多了几个空格而已:
在/r加空格会显示在456前出现空格
而在123前加空格却是
一个空格显示:4563
两个空格显示:45623
三个空格显示:456123

有哪位高手给解释下这到底是怎么回事呢?估计要是面试出现这样的题目我就挂了!
回复 使用道具 举报
陈虹旭 发表于 2012-9-24 12:10
呵呵 楼主不用着急,不是你机器的问题哦 !虽然我不知道这是什么原因,也想同求下哪位高手可以解释这个现象 ...

\r 就是return  回到 本行 行首  这就会把这一行以前的输出 覆盖掉

如:
int main() {

cout << "hahah" << "\r" << "xixi" ;


}
最后只显示 xixi 而 hahah 背覆盖了

\n 是回车+换行  把光标 先移到 行首 然后换到下一行 也就是 下一行的行首拉

int main() {

cout << "hahah" << "\n" << "xixi" ;


}
则 显示
hahah
xixi
我感觉应该是这样的过程
回复 使用道具 举报
燕国庆 发表于 2012-9-24 14:40
\r 就是return  回到 本行 行首  这就会把这一行以前的输出 覆盖掉

如:

嗯 应该是这样吧  学习了  呵呵
回复 使用道具 举报
本帖最后由 冯伟 于 2012-9-24 15:49 编辑

\r\n 是windows的换行命令,一般是在往文件中输入文字时换行用,在其它如Linux系统上没用的。在控制台输出一般用\n换行,如果往文件中输出时换行考虑到跨平台性就不能用转义字符了,可以用Java提供的方法来换行
\r是归位的意思,就是光标回到该行首位,如果它的后面有字符时就擦除一个写一个,例如"123456\rabc",因为\r 后有三个字符,所以输出为   
abc456
前面的123被擦除了,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马