黑马程序员技术交流社区
标题:
IO--<<readLine()换行疑问>>
[打印本页]
作者:
杨增坤
时间:
2013-10-1 11:54
标题:
IO--<<readLine()换行疑问>>
本帖最后由 杨增坤 于 2013-10-1 16:17 编辑
import java.io.FileReader;
import java.io.IOException;
public class MyBufferedReader {
private FileReader fr = null;
public MyBufferedReader(FileReader fr) {
super();
this.fr = fr;
}
/* 模拟readLine的话,其实里面封装了一个数组,我们为了方便,就封装StringBuilder对象,这样操作方便 */
public String readLine() throws IOException {
StringBuilder sb = new StringBuilder();
int ch = -1;
while ((ch = fr.read()) != -1) {
//System.out.print(ch+","); 从输入的个数判断出
if (ch == '\r')//当文件中就存在\r,那此时是否存入StringBuilder中呢,开始我认为是不会存入的,但是结果输出了,难道是读取的时候例如:\r,把\ 和 r分开读取了,这样理解的话,就通顺了
continue;
if (ch == '\n')//这里和\r的疑问和理解一样
return sb.toString();
else
sb.append((char) ch);
}
if (sb.length() != 0)// 这里解决了,最后一样没有回车,防止最后一行不被输出
return sb.toString();
return null;
}
public void close() throws IOException {
if (fr != null) {
fr.close();
}
}
}
复制代码
假如文件中存在\r或则\n,那么结果会输出吗?我的理解正确吗??是不是每行都有默认的(在window上的)\r\n,自己输出的会分开读取,是不是可以这样理解???
作者:
路边小色狼
时间:
2013-10-1 13:22
'\r'这是一个字符,怎么拆呢,readLine(),返回的字符串中是没有换行功能的
我是这么理解的,读文本文件时,每行结尾都有回车,windows中回车是'\r''\n'两个字符,读到'\r’时就无视他,读到'\n'时把存在StringBuffer里的字符串返回,而'\r''\n'都没在字符串中。
你建个txt文件,自己用realLine()读一下,就知道,所有文字挤在一行
所以BufferedWriter 中会有一个newLine()方法,就是用来换行
作者:
路边小色狼
时间:
2013-10-1 13:31
我知道你什么意思了,这里的'\r'都是一个字符,
而文本中的 \r 是'\' 'r',两个字符,你在文本中怎么输入一个字符的'\r'
这个我之前也困惑过
作者:
lizhangzhi
时间:
2013-10-1 14:11
文件中的'\r'其实是两个字节,而系统中换行标记'\r'是一个字节,并且是隐式的,不会显示出来,但会占用字节空间,当系统读取到默认的'\r',会执行换行操作,文本中的'\r',会当做字符来处理;
作者:
摄影勾魂
时间:
2013-10-1 14:25
在记事本中输入“\r”------->'\'+'r';
在记事本中敲回车--------->'\r'. (\n和\r一个道理,略)
作者:
王靖远
时间:
2013-10-1 15:02
\是转义符,读到它,编译器就会去度下一个字符,看看是转义成什么。\r\n 是4个字符,但是在一起就是换行的意思
作者:
Simple_love
时间:
2013-10-3 01:29
文本中输入不了一个字符\n,但是可以通过写入流向文本写入一个字符\n,但是在文本中是不会换行,必须前面加上\r,在Java读取流中,通常文本中的转义字符是不会被读取的,,即使通过写入流写入\r\n也,读取也不会出现换行符。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2