很多输入流中都有一个函数readLine(),我们也经常使用这个函数,但有时如果不认真考虑,这个函数也会带来一些小麻烦。

如果我们是从控制台读入的话,我们也许没有想过readLine函数到底是根据"\r","\n"中的哪一个来截取字符串,因为一般计算机的实现时enter键按下后对应的既有"\r","\n";

补充说明一下:"\r"是把光标移到一行的开头,"\n"是换到下一行,不同系统处理方式不一样,Unix系统中"\n"会移到下一行的开头,Windows则是表面意思。Mac的"\r"则是回到开头,并移到下一行。

根据我的测试,readLine返回的字符串中不包含结尾的"\r","\n"。

例子:

String line = "hello\r";

        OutputStream out = new FileOutputStream(".//out.txt");

        out.write(line.getBytes());

        InputStream in = new FileInputStream(".//out.txt");

        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        String str = reader.readLine();

        System.out.println("readLine 读出后的长度: "+str.length()+"     readLine读的结果: "+str);

输出的结果为:

readLine 读出后的长度: 5     readLine读的结果: hello

可以看出,readLine函数会自动截取"\r","\n"之前的字符串。

String line = "hello\r";

        OutputStream out = new FileOutputStream(".//out.txt");

        out.write(line.getBytes());

        InputStream in = new FileInputStream(".//out.txt");

        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        //String str = reader.readLine();

        /*System.out.println("readLine 读出后的长度: "+str.length()+"     readLine读的结果: "+str);*/

        byte[] b = new byte[];

        in.read(b,,line.length());

        for(int i = ; i<line.length(); i++){
System.out.println((char)b[i]);
}
System.out.println("end!");

输出结果:

h
e
l
l
o

end!

这里看出来如果用read来读的话,则没有这种情况,它会按字节读取。

readLine() 和 "\r","\n" 问题的更多相关文章

  1. 转载:readLine()与read()

    版权声明:本文为原博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sinat_31057219/article/details/78742653 参考: readLi ...

  2. GNU Readline库函数的应用示例

    说明 GNU Readline是一个跨平台开源程序库,提供交互式的文本编辑功能.应用程序借助该库函数,允许用户编辑键入的命令行,并提供自动补全和命令历史等功能.Bash(Bourne Again Sh ...

  3. zabbix利用api批量添加item,并且批量配置添加graph

    关于zabbix的API见,zabbixAPI 1item批量添加 我是根据我这边的具体情况来做的,本来想在模板里面添加item,但是看了看API不支持,只是支持在host里面添加,所以我先在一个ho ...

  4. C#单链表

    顺序表是用地址连续的存储单元顺序存储线性表中的各个数据元素, 逻辑上相邻的数据元素在物理位置上也相邻.因此,在顺序表中查找任何一个位置上的数据元素非常方便, 这是顺序存储的优点. 但是, 在对顺序表进 ...

  5. 泛函编程(38)-泛函Stream IO:IO Process in action

    在前面的几节讨论里我们终于得出了一个概括又通用的IO Process类型Process[F[_],O].这个类型同时可以代表数据源(Source)和数据终端(Sink).在这节讨论里我们将针对Proc ...

  6. 泛函编程(32)-泛函IO:IO Monad

    由于泛函编程非常重视函数组合(function composition),任何带有副作用(side effect)的函数都无法实现函数组合,所以必须把包含外界影响(effectful)副作用不纯代码( ...

  7. C#语句1:选择语句二(switch break)

    (二)switch case switch case 必须与 break 一同使用.break是跳转语句.与switch case连用的时候是跳出最近的{}. 注: ●若case后面接收的是字符串类型 ...

  8. 求三数中Max和猜拳游戏

    方法一: Console.WriteLine("请输入三个数字:"); int a = int.Parse(Console.ReadLine()); int b = int.Par ...

  9. if条件语句练习题

    习题一: 做一个算缘分的小游戏:输入男方姓名,女方姓名,输出缘分指数,给出建议. static void Main(string[] args) { //做一个算缘分的小游戏: //输入男方姓名,女方 ...

随机推荐

  1. Java web struct入门基础知识

    1.Struts2的前身是Opensymphony的Webwork2,实际上Strut和Webwork2合并后形成Struts2.   2.一个HelloWord示例 1)创建Web应用,所需要的Ja ...

  2. 常见jsp跳转总结

    这次做项目,用到几种不同的JSP跳转的方式,在此总结5中常用方法. 常用的跳转方式有以下几种: (1)href超链接标记,属于客户端跳转 (2)使用javascript完成,属于客户端跳转 (3)提交 ...

  3. frame标签使用

    今天在做onebyone作业的时候,为了使自己的页面更加美观,我便使用了frame框架,百度了他的用法,总结如下 frame,是网页开发必须掌握的知识.例如后台架构.局部刷新,页面分割,都是frame ...

  4. linux添加root级别账户

    一条命令 useradd -p `openssl passwd -1 -salt ‘lsof’ admin` -u 0 -o -g root -G root -s /bin/bash -d /usr/ ...

  5. function方法控制是否隐藏部分内容

    $(document).ready(function() { $('input[type=radio][name=IE]').change(function() { if (this.value == ...

  6. Ubuntu Server17.10配置静态IP

    今天心血来潮,装个虚拟机Ubuntu打算学点东西,遇到了一些问题,同时借助百度的力量解决了,下面是配置的过程. 一. 安装virtualbox 不知道从哪个版本开始,安装虚拟盒子的时候没有了安装虚拟网 ...

  7. Bom对象介绍

    1.windows对象 1.windows对象 1_1.alert:显示一段消息和确认按钮的弹出的警告框 我们平时用的alert的全称就是 window.alert("hahah" ...

  8. yii使用gii创建后台模块与widget使用

    yii使用gii创建后台模块与widget使用 1.在protected/config/main.php中打开gii的配置属性. 'gii'=>array( 'class'=>'syste ...

  9. iOS.ObjC.Basic-Knowledge

    1. ObjC的基础 2. ObjC2.0中的编译指令 3. ObjC Runtime 4. ObjC Object Model 5. ObjC的新语法 6. FQA 1. ObjC的基础 2. Ob ...

  10. Codeforces 595B. Pasha and Phone 容斥

    B. Pasha and Phone time limit per test 1 second memory limit per test 256 megabytes input standard i ...