很多输入流中都有一个函数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. javascript中this之说

    this是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象.不过,匿名函数的执行环境具有全局性,因此其this对象通常 ...

  2. padright padleft

    在 C# 中可以对字符串使用 PadLeft 和 PadRight 进行轻松地补位. PadLeft(int totalWidth, char paddingChar) //在字符串左边用 paddi ...

  3. Loadrunner进行参数化

    Loadrunner进行参数化 Loadrunner中进行参数化,这里有三种方法. 对需要多次使用的变量进行参数化,比如登录信息的用户名和密码,首先需要选中需要参数化的值,然后右键选择Replace ...

  4. SpringMVC的实现过程

    Spring Web MVC 处理Http请求的大致过程: 一旦Http请求到来,DispatcherSevlet将负责将请求分发.DispatcherServlet可以认为是Spring提供的前端控 ...

  5. 安装Ubuntu后一些准备

    一些基础 安装的时候,先不选镜像就可以避开简易安装. 更改root密码:sudo passwd root 更改源,更新,不行就打断在更新 安装vim 改为unity模式,安装VMware Tools, ...

  6. iOS - push 或 pop或点击导航栏返回pop指定导航控制器

    以前一直有个很疑惑的问题没有搞清楚 关于ios中 viewcontroller的跳转问题,其中有一种方式是采用navigationController pushViewController 的方法,比 ...

  7. vue1.0学习

    vue 一片html代码配合上json,在new出来vue实例 Demo:1 数据双向绑定(v-model="message",{{message}}) <div id=&q ...

  8. select查询

    4.2  查询功能 SQL的核心是查询.SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行. 以下表为以后的例子中使用表: 档案 ...

  9. inline 引起undefined reference to

    main.cc:57: undefined reference to `evpp::udp::UdpDecoder::GetHeader()'collect2: error: ld returned ...

  10. 设计规范VS设计创造力,谁更胜一筹?

    设计规范和设计创造力哪个更重要?这是一个颇具争议性的话题.如果是3年前问我这个问题我会毫不犹豫的选择设计创造力,毫无疑问,一个好的设计创造力真的是可以让人像打了鸡血一样疯狂. 原来在上大学的时候,我就 ...