1.“回车”这个名词的来历。  

   关于“回车键”的来历,还得从机械英文打字机说起。在机械英文打字机上,有一个部件叫“字车”,每打一个字符(原为单词,但是个人觉得这里应该是字符),“字车”就前进一格。当打满一行字符后,打字者就得推动“字车”到起始位置,这时打字机会有两个动作响应:一是“字车”被归位,二是滚筒上卷一行,以便开始输入下一行,这个推动“字车”的动作叫“回车”。后来,在电动英文打字机上,人们增加了一个直接起“回车”作用的键。这个新增的键就被称为“回车键”。后来电脑的研制时也借用这个“回车”的概念。

2.“换行”是一种操作或者动作。

  换行: 在电脑上,编辑软件中一般用于结束一行文字输入,并将光标移到下一行的行首的位置。

3.   转义字符“\r”,“\n”。

  

  在C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,因为后面的字符,都不是它本来的ASCII字符意思了就称为转义字符,。Java是在的底层用c 和c++写的,Java中也有转义字符这一说。

详情看ASCII码表https://baike.baidu.com/pic/ASCII/309296/0/c2fdfc039245d688c56332adacc27d1ed21b2451?fr=lemma&ct=single#aid=0&pic=c2fdfc039245d688c56332adacc27d1ed21b2451

看表头 有控制码 和打印码 的区分

4.其他的一些知识

  在Unix系统下执行 换行操作 用“\n”   在windows 操作做系统下执行 换行操作 用“\r\n”  在Mac操作系统下执行 换行操作用“\r”

其他人对这些知识点的介绍:

http://blog.csdn.net/xiaoxian8023/article/details/8448160

有了上面的了解 我们可以这样认为

我们通常说的“回车” 也就是得到 换行的效果 也就是点电脑上的enter键

转义字符  是用在打印数据时 或者 说 在电脑硬盘上输入数据使用  来控制字符的位置  这些字符不显示  来控制一些操作

回车得到换行的效果,敲enter键,在文本文件中产生我们看不见的转义字符

下面来测试一下

1.测试控制台输出(打印)规律

  

  1. 1 public class DemoEscapeCharacter {
  2. 2 public static void main(String[] args) {
  3. 3 System.out.print("aaa");
  4. 4 System.out.print("bbb");
  5. 5 System.out.print("ccc");
  6. 6 System.out.print("ddd");
  7. 7 System.out.print("eee");
  8. 8 System.out.print("fff");
  9. 9 System.out.println("*************");
  10. 10 System.out.print("转义字符\\r "+"aaa\r");
  11. 11 System.out.print("转义字符\\n "+"bbb\n");
  12. 12 System.out.print("转义字符\\r\\n "+"ccc\r\n");
  13. 13 System.out.print("转义字符\\n\\r "+"ddd\n\r");
  14. 14
  15. 15 System.out.print("转义字符\\n x \\r "+"eeeeeee\nf\r");
  16. 16 System.out.print("转义字符\\n xxx \\r "+"eeeeeee\nfff\r");
  17. 17 System.out.print("转义字符\\r x \\n "+"eeeeeee\rf\n");
  18. 18 System.out.print("转义字符\\r xxx \\n "+"eeeeeee\rfff\n");
  19. 19 System.out.println("******************************************");
  20. 20 System.out.print("转义字符\\n\\r\\r\\r"+"eeeeeeeeeeeeeeeee\n\r\r\r"+"abcdefghijk");
  21. 21 }
  22. 22 }

原先没有在字符串末尾加 转义字符的 输出(打印)到控制台 没有换行 加有"\r","\n","\r\n"的都出现换行

那么在控制台的换行是如何实现的那?

"\r","\n"------>"\r\n"  前两者都转换为了“\r\n” 或者 说都是换行的动作  因为Java中有 重载 方法 ,也就是Java面向对象的一个特征 多态。也可以看出Java的跨平台 无论什么平台用IO流读到内存中 显示到控制台上的" 文本信息"可以无损还原。

“ddd\n\r” 不符合 "\r","\n","\r\n" 任何一个 只能 执行“\n”,"\r",也就是两次换行 所以打印出来时和“eeeeeee\nf\r” 的eeeeeee有一行空行

最后“eeeeeeeeeeeeee\n\r\r\rabcdefghijk”有四次换行 最后一次换行 有内容写入 所以有3行空白行

  2.测试Windows下的换行是否是“\r\n”

  

  1. 1 import java.io.FileNotFoundException;
  2. 2 import java.io.FileReader;
  3. 3 import java.io.FileWriter;
  4. 4 import java.io.IOException;
  5. 5
  6. 6 public class DemoReader {
  7. 7 public static void main(String[] args) {
  8. 8 FileReader fr=null;
  9. 9 try {
  10. 10 fr=new FileReader("C:/Users/lenovo/Desktop/编译错误单词.txt");
  11. 11 char []buf=new char[10];//接受读取的一段 信息
  12. 12 int realCount=0;
  13. 13 while ((realCount=fr.read(buf))!=-1){
  14. 14 for (int i = 0; i <realCount; i++) {
  15. 15 // if(buf[i]=='\r'){
  16. 16 // System.out.print(" \\r");
  17. 17 // }
  18. 18 // if(buf[i]=='\n'){
  19. 19 // System.out.print(" \\n");
  20. 20 // }
  21. 21 System.out.print(buf[i]);
  22. 22 }
  23. 23 }
  24. 24 } catch (FileNotFoundException e) {
  25. 25 // TODO Auto-generated catch block
  26. 26 e.printStackTrace();
  27. 27 } catch (IOException e) {
  28. 28 // TODO Auto-generated catch block
  29. 29 e.printStackTrace();
  30. 30 }finally{
  31. 31 if(fr!=null){
  32. 32 try {
  33. 33 fr.close();
  34. 34 } catch (IOException e) {
  35. 35 // TODO Auto-generated catch block
  36. 36 e.printStackTrace();
  37. 37 }
  38. 38 }
  39. 39 }
  40. 40 }
  41. 41 }

  

第一张图片是Windows中用记事本打开的原文本

第二张图片是注释掉15-20行代码实现的无损还原

第三章图片是不注释15-20行代码实现的 增加还原

第三张控制台输出内容  的解释

代码 中 进行了这样的操作 凡是读取到的转义字符“\r”向控制台多输入一个 字符串\r

凡是读取到的转义字符“\n”向控制台多输入一个 字符串\n

这样的话因为 Windows 下记事本打开的每行末尾都有两个我们看不见的转义字符"\r","\n",这两个字符是我们在Windows下敲enter键产生的 正是ASCII码中的控制字符

io流读取数据时可以读取到 ,我们在还原时进行特殊的处理来确定 Windows下的换行控制字符 是什么

以控制台第一行第二行为例  因为 在第一行 “编译异常”末尾有“\r”,“\n”两个字符 当我们读取到字符“\r”时我们在原来的末尾加上了字符串“\r”,然后读取到的“\r”向控制台输出 即让控制台换行,所以当我们读取到下一个字符“\n”时 输出的字符串“\n”在下一行(第二行)行首显示(打印)出来 然后 读取到的转义字符“\n”向控制台输出 即 继续换行  所以原来的第二在控制台的第三行输出

结合控制台打印特点 可知道Windows下的换行是通过 “\r\n”两个字符控制的 或者说我们每次换行敲下enter键 就产生了两个我们看不见的转义字符“\r\n”

我们还可以逆向测试  从程序中向 硬盘写入 text文件的内容

程序如下 结果如下 分析 靠个人眼力  很简单

  1. 1 import java.io.FileWriter;
  2. 2 import java.io.IOException;
  3. 3
  4. 4 public class TestFileWriter {
  5. 5 public static void main(String[] args) {
  6. 6 String[] text={
  7. 7 "这是第一行\n",
  8. 8 "这是一个TestFileWriter示例程序\n",
  9. 9 "需要用FileWriter打开文件\n",
  10. 10 "访问结束后需要关闭文件\n",
  11. 11 "否则内容不会写入文件,因为只写到了磁盘的缓冲区",
  12. 12 };
  13. 13 FileWriter fw=null;
  14. 14 try {
  15. 15 fw=new FileWriter("C:/Users/lenovo/Desktop/FileWriter1.text");
  16. 16 for(String str:text){
  17. 17 char[]buf=str.toCharArray();
  18. 18 fw.write(buf,0,buf.length);
  19. 19 }
  20. 20 } catch (IOException e) {
  21. 21 // TODO Auto-generated catch block
  22. 22 e.printStackTrace();
  23. 23 }finally{
  24. 24 try {
  25. 25 fw.close();
  26. 26 } catch (IOException e) {
  27. 27 // TODO Auto-generated catch block
  28. 28 e.printStackTrace();
  29. 29 }
  30. 30 }
  31. 31 }
  32. 32 }

  1. 1 import java.io.FileWriter;
  2. 2 import java.io.IOException;
  3. 3
  4. 4 public class TestFileWriter {
  5. 5 public static void main(String[] args) {
  6. 6 String[] text={
  7. 7 "这是第一行\r\n",
  8. 8 "这是一个TestFileWriter示例程序\r\n",
  9. 9 "需要用FileWriter打开文件\r\n",
  10. 10 "访问结束后需要关闭文件\r\n",
  11. 11 "否则内容不会写入文件,因为只写到了磁盘的缓冲区",
  12. 12 };
  13. 13 FileWriter fw=null;
  14. 14 try {
  15. 15 fw=new FileWriter("C:/Users/lenovo/Desktop/FileWriter1.text");
  16. 16 for(String str:text){
  17. 17 char[]buf=str.toCharArray();
  18. 18 fw.write(buf,0,buf.length);
  19. 19 }
  20. 20 } catch (IOException e) {
  21. 21 // TODO Auto-generated catch block
  22. 22 e.printStackTrace();
  23. 23 }finally{
  24. 24 try {
  25. 25 fw.close();
  26. 26 } catch (IOException e) {
  27. 27 // TODO Auto-generated catch block
  28. 28 e.printStackTrace();
  29. 29 }
  30. 30 }
  31. 31 }
  32. 32 }


还有个比较简单的方法 但看不出 内容
打开记事本  输入  两个汉字  敲enter  保存 ;查看文件大小 6字节[b];

创建新的 一个 记事本 文件 输入两个汉字 保存 ;查看文件大小 4字节[b];

一个汉字两个字节 2[b] 。

回车,换行,转义字符“\r”,“\n”是什么关系?的更多相关文章

  1. js/jquery 去掉空格.回车.换行

    本文转载自 http://hi.baidu.com/niubore/item/426532faab4ddcc50dd1c8f9 Jquery:$("#accuracy").val( ...

  2. java中去除字符串(String)中的换行字符(\r \n \t)

    例1: public class Test { public static void main(String[] args) { String s = "'sds gdasda" ...

  3. js/jquery去掉空格,回车,换行示例代码

    Jquery: $("#accuracy").val($("#accuracy").val().replace(/\ +/g,""));// ...

  4. 写入文本文件时“\n”不是回车换行而是个方块“■”的解决方法

    用“\n”写入文本文件时,打开文本文件显示的为什么不是回车换行而是个黑方块“■”,但用file()读取时还是认为是一行一行的? 首先在WINDOWS里回车换行是"\r\n"; 而L ...

  5. js/jquery去掉空格,回车,换行

    Jquery:$("#accuracy").val($("#accuracy").val().replace(/\ +/g,""));//去 ...

  6. 【转载】 C++中回车换行(\n\r)和换行(\r)的区别

    原文:http://blog.csdn.net/xiaofei2010/article/details/8458605 windows下的点一下回车,效果是:回车换行,就是\r\n unix系统下的回 ...

  7. \r\n 回车换行浅析

    \r \ 10 x0a return \n \ x0d newline Unix系统里,每行结尾只有“<换行>”,即“\n”: Windows系统里面,每行结尾是“<回车>&l ...

  8. \r\n回车换行\r回车\n换行的区别

    在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候 ...

  9. 用UltraEdit软件替换回车换行的窍门

    转载:http://www.zhuantilan.com/jiqiao/46518.html 方法/步骤 1.打开一个原始文档,在文档中各个人物名称是以逗号分隔的,我们下面来尝试把逗号替换为换行符. ...

  10. 【转】去掉Sqlite3 数据库中的前后回车换行符(newline)

    原文: http://www.blogjava.net/pts/archive/2013/06/10/400... 时间: 2013-06-10 转自:http://www.ityuedu.com/a ...

随机推荐

  1. python高阶编程(一)

    1.生成器 通过列表⽣成式,我们可以直接创建⼀个列表.但是,受到内存限制,列表容量肯定是有限的.⽽且,创建⼀个包 含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素,那后 ...

  2. 利用fread读取二进制文件的bug

    最近在做一个项目时需要读取二进制文件,我用C语言的fread进行读取,代码如下: FILE *fp; int read_data; fopen_s(&fp, file_path, " ...

  3. python调用java&反编译地址

    反编译工具地址: https://github.com/java-decompiler/jd-gui/releases 你想知道的JPype全在这里∞   先总结自己趟的坑 1. python进程是6 ...

  4. [Windows] Visual Studio 类库Xml文档免费翻译工具 《Xml文档翻译器2.1》

    谷歌Chrome翻译功能失效用不了,我们一起来恢复翻译功能! 可用的谷歌国内 IP: 142.250.4.90 translate.googleapis.com 142.250.30.90 trans ...

  5. NameNode启动问题:Failed to load an FSImage file!

    NameNode启动问题:Failed to load an FSImage file! 2022-01-23 13:35:53,807 FATAL org.apache.hadoop.hdfs.se ...

  6. element表格数据v-for替换期望文字

    后端返回等级编码 "1","2"....并给你一个字典obj[ {dicCode: "4", dictFlag: "riskLev ...

  7. pytest用例管理框架实战(基础篇)

    先安装pip install pytest pytest用例管理框架 默认规则: 1.py文件必须以test_开头或者_test结尾 2.类名必须以test开头 3.测试用例必须以test_开头 ge ...

  8. 取出预训练模型中间层的输出(pytorch)

    1 遍历子模块直接提取 对于简单的模型,可以采用直接遍历子模块的方法,取出相应name模块的输出,不对模型做任何改动.该方法的缺点在于,只能得到其子模块的输出,而对于使用nn.Sequensial() ...

  9. Leftpad事件 我们是不是早已忘记该如何好好地编程?

    多年前的Leftpad 撤包事件使得React . Babel 和许多流行的npm模块都受到波及,无法正常运行. 这些受到影响的模块都引入了一个叫做 left-pad 的模块. 以下就是这十一行代码: ...

  10. Android笔记--案例:找回密码

    找回密码 具体实现: 登录成功: 报告密码不同: 报告验证码错误: 代码相关: 找回密码的界面很简单,不细说了,直接写就行 找回密码的逻辑实现: 下一次就去写数据存储啦! 拜拜!