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 public class DemoEscapeCharacter {
 2     public static void main(String[] args) {
 3         System.out.print("aaa");
 4         System.out.print("bbb");
 5         System.out.print("ccc");
 6         System.out.print("ddd");
 7         System.out.print("eee");
 8         System.out.print("fff");
 9         System.out.println("*************");
10         System.out.print("转义字符\\r   "+"aaa\r");
11         System.out.print("转义字符\\n   "+"bbb\n");
12         System.out.print("转义字符\\r\\n   "+"ccc\r\n");
13         System.out.print("转义字符\\n\\r   "+"ddd\n\r");
14
15         System.out.print("转义字符\\n x \\r   "+"eeeeeee\nf\r");
16         System.out.print("转义字符\\n xxx \\r   "+"eeeeeee\nfff\r");
17         System.out.print("转义字符\\r x \\n   "+"eeeeeee\rf\n");
18         System.out.print("转义字符\\r xxx \\n   "+"eeeeeee\rfff\n");
19         System.out.println("******************************************");
20         System.out.print("转义字符\\n\\r\\r\\r"+"eeeeeeeeeeeeeeeee\n\r\r\r"+"abcdefghijk");
21     }
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 import java.io.FileNotFoundException;
 2 import java.io.FileReader;
 3 import java.io.FileWriter;
 4 import java.io.IOException;
 5
 6 public class DemoReader {
 7     public static void main(String[] args) {
 8         FileReader fr=null;
 9         try {
10             fr=new FileReader("C:/Users/lenovo/Desktop/编译错误单词.txt");
11             char []buf=new char[10];//接受读取的一段 信息
12             int realCount=0;
13             while ((realCount=fr.read(buf))!=-1){
14                 for (int i = 0; i <realCount; i++) {
15 //                    if(buf[i]=='\r'){
16 //                        System.out.print(" \\r");
17 //                    }
18 //                    if(buf[i]=='\n'){
19 //                        System.out.print(" \\n");
20 //                    }
21                     System.out.print(buf[i]);
22                 }
23             }
24         } catch (FileNotFoundException e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         } catch (IOException e) {
28             // TODO Auto-generated catch block
29             e.printStackTrace();
30         }finally{
31             if(fr!=null){
32                 try {
33                     fr.close();
34                 } catch (IOException e) {
35                     // TODO Auto-generated catch block
36                     e.printStackTrace();
37                 }
38             }
39         }
40     }
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 import java.io.FileWriter;
 2 import java.io.IOException;
 3
 4 public class TestFileWriter {
 5     public static void main(String[] args) {
 6         String[] text={
 7                 "这是第一行\n",
 8                 "这是一个TestFileWriter示例程序\n",
 9                 "需要用FileWriter打开文件\n",
10                 "访问结束后需要关闭文件\n",
11                 "否则内容不会写入文件,因为只写到了磁盘的缓冲区",
12         };
13         FileWriter fw=null;
14         try {
15             fw=new FileWriter("C:/Users/lenovo/Desktop/FileWriter1.text");
16             for(String str:text){
17                 char[]buf=str.toCharArray();
18                 fw.write(buf,0,buf.length);
19             }
20         } catch (IOException e) {
21             // TODO Auto-generated catch block
22             e.printStackTrace();
23         }finally{
24             try {
25                 fw.close();
26             } catch (IOException e) {
27                 // TODO Auto-generated catch block
28                 e.printStackTrace();
29             }
30         }
31     }
32 }

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


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

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

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

转载于:https://www.cnblogs.com/acman-mr-lee/p/6408182.html

回车,换行,转义字符“\r”,“\n”是什么关系?相关推荐

  1. oracle插入、替换回车换行\r\n

    回车是光标回到当前行的开头,换行是光标停在当前位置的下一行,结合就是下一行的开头. 如果直接插入\r\n,查出来的数据就是"\r\n",是'\''r''\''n'4个字符. ora ...

  2. C语言转义字符\r\n的使用

    C语言的\r\n晕乎了好久了,今天算是整明白了,来写文章纪念一下,也防止其他初学C语言的同学们入坑. C中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,称为转义字 ...

  3. html+正则+换行+回车,正则与回车换行符使用详解

    这次给大家带来正则与回车换行符使用详解,正则与回车换行符使用的注意事项有哪些,下面就是实战案例,一起来看一下. C#中,读取文本文件内容,里面往往有许多回车换行符("\r\n"), ...

  4. 查看、替换回车换行符

    od -c xxx.txt 查看文件中的回车换行符 \r 回车符  \n换行符 替换回车换行符为空: perl -pi -e "s#\r\n##g"  xxx.txt

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

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

  6. 回车符、换行符和回车换行符

    我的CSDN主页 My Python 学习个人备忘录 我的HOT博 自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多.            ...

  7. 瀚高数据库中插入回车换行符

    瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5 文档用途 java程序给表插入数据时,有的情况 ...

  8. java换行转义字符串_回车,换行,转义字符“\r”,“\n”是什么关系?

    1."回车"这个名词的来历. 关于"回车键"的来历,还得从机械英文打字机说起.在机械英文打字机上,有一个部件叫"字车",每打一个字符(原为单 ...

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

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

最新文章

  1. thymeleaf+layui 展示table 报500
  2. 如何编辑UG中打开文件的历史记录信息(history.pax)?
  3. amqp协议 面试_2020最新分布式消息中间件-RabbitMQ面试题(必问)
  4. 2019ICPC(上海) - Color Graph(二分图+状态压缩)
  5. python3 csv读写_在python3中读取、更新和写入更新的CSV文件
  6. 算法:用户喜好--Map与List配合下的查找
  7. javascript对象序列化(对象与JSON字符串的互换)
  8. 【elasticsearch】es一直重启,报错日志是分片无法分配
  9. 523. 连续的子数组和
  10. Handheld Group推出Algiz平板,内置RFID读取器
  11. 微软图表控件MsChart使用初探
  12. html中的排名怎么写,html制作畅销书排行榜
  13. 黑黛增发罗林川:如何三年开1000家连锁店?_深度案例_i黑马
  14. 大数据之实战足球盘口、凯利、必发和预测结果分析
  15. CPU核心、进程、线程
  16. Java解决杨辉三角问题(这里提供了两种方法)
  17. 西门子实数转整数_西门子PLC双整数转换为浮点数是怎么转换的???
  18. 活动 | Authing 首次渠道合作活动圆满落幕
  19. 应用线性代数简介 - 向量,矩阵和最小二乘法 By Stephen Boyd and Lieven Vandenberghe
  20. XP sp3共享最大连接数修改工具 EvID4226Patch.exe

热门文章

  1. 转SFTP 和FTPS的区别是什么?
  2. JAVA继承重写的规则
  3. linux的centos7安装mysql5.7服务教程
  4. python经典数据类型
  5. linux 进程 转存储,Linux memory management——(进程虚存空间的管理)(转)
  6. stringr | 文本处理方法(Ⅰ-3):字符串处理函数(下)
  7. 零基础学python看什么书好?
  8. 如何创建一个Mybatis程序,实现对数据库的简单查询?
  9. Servlet超详解+流程图
  10. 超过32位java_在java中存储和使用超过32位的数字!