换行符和回车符

来源

换行和回车容易搞混淆,其实它们是有区别的

  • 换行符:作用为新(new)建一行,转义表示\n
  • 回车符:作用为将光标回到(return)行首,转义表示\r

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

  • Unix系统里,每行结尾只有“<换行>”,即“\n”;
  • Windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”;
  • Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。 java中可以通过System.getProperty("line.separator")来获取

转义字符

在字符集里面,每个字符都有一个唯一的编号,计算机存储字符就是存储它的编号,向我们展示则展示可以用人类语言看懂和书写的字符,比如字母,数字等。但是有的字符却不那么好表示,比如回车、换行,因此我们采取/+字母或数字这样的形式来表示这些特殊的字符,当然这只是对于人类来说的,计算机仍然还是存储特殊字符的编号就行了。

转义字符.png

Scanner的坑

当我们使用Scanner in = new Scanner(Syetem.in)来获取键盘输入的时候,获取一行输入方法nextLine()和其他的获取数值方法如nextInt()有一些小的区别,如果我们没搞清楚,就容易陷入其中的坑,还觉得莫名其妙的。一般我们输入完成时按下回车键告诉程序本行输入结束。考虑下面的代码,一直获取键盘的输入并打印到控制台,直至按下ctrl + c

import java.util.Scanner;
class ScannerTest {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            String s = in.nextLine();
            int a = in.nextInt();
            //String s1 = nextLine();//吸收掉上次余留的换行符
            System.out.println(s);
            System.out.println(a);
        }
    }
}

下面为运行结果,有红色下划线的为输入:


ScannerTest 运行结果.png

可以看到在第二轮输入hello的时候报错,提示输入不匹配。我们先说明两个方法的区别:Scanner会使用一个缓存来保存用户的输入,并在输入的末尾加上一个“\n”。当用户输入回车键,Scanner就会从缓存区读取内容赋值给程序的变量,读取了的内容将被从缓冲区清除掉。nextInt方法接收整型字符,只读取缓冲区中前面部分的数字字符,不会读取“\n”字符,所以“\n”字符被留在缓冲区。nextLine读入一行文本,会读取整个缓冲区,包括”\n”字符,但并不会返回“\n”给程序的变量。第一轮输入hello,赋值给s;然后输入3赋值给a,但是注意,scanner对象并没有读取末尾的换行符,所以在第二轮的时候,还没等我输入hello,上一轮余留下的换行符就赋值给s了,当我输入第二轮的hello时,scanner对象就将hello赋值给a,所以导致输入不匹配。添加一行(代码中注释的那行)后没问题了,有红色下划线的为键盘输入(编译的时候报错,编码GBK的不可映射字符,编译的时候指定-encoding UTF-8)


ScannerTest 运行结果.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容