java中的换行符的坑-转义符

2016-10-17 / 10 阅读 / Java

前几天遇到一个问题,就是同样的换行字符在java代码中可以成功,而从文件中定义的的则无效而且直接显示成了'\n',怎一个大写的懵逼啊!
看来应该是字符串的问题,来研究下两种方式的字符数组的字节是怎么样的。

首先来一个实验

	String str = "A\nA";

	for (byte b : str.getBytes()) {
		System.out.println(b);
	}

结果:

65
10
65
也就是说\n两个字符在这里是被当做一个字符来处理了

 

再来一个实验

新建一个文件test.txt
内容:A\nA

同样的来看一下

	FileInputStream fileInputStream = new FileInputStream("test.txt");

	byte[] bytes = new byte[fileInputStream.available()];
	fileInputStream.read(bytes);
	String str = new String(bytes);

	for (byte b : str.getBytes()) {
		System.out.println(b);
	}

结果:

65
92
110
65

 

差别出来了,\n字符在java代码中是做一个字符,而从文件中读取的字符变为2个了,这就是换行符不起作用的原因。

既然发现原因那么就好解决了,直接把字符中\` n一起替换为\n`就行了。

上面几次试验可以发现下面3个符号对应的码
\n = 10

`` = 92

n = 110

于是:


	FileInputStream fileInputStream = new FileInputStream("test.txt");

	byte[] bytes = new byte[fileInputStream.available()];
	fileInputStream.read(bytes);

	String str = new String(bytes);
	str = str.replaceAll("\\n","\n");

	for (byte b : str.getBytes()) {
		System.out.println(b);
	}

自信满满的,\表示字符\ n表示字符n,一起替换为\n不就大功告成了嘛。
结果一脸闷逼:

65
92
110
65

不过想想\`这个符号好像在java中是不能独立存在的,想要表示`字符,那么它原来应该是这样\\`. 上面的内容就是这样\n。那么替换为\n换行符,应该是用\\n`来匹配吧。

抱着试试的态度再来试验一下:


	FileInputStream fileInputStream = new FileInputStream("test.txt");

	byte[] bytes = new byte[fileInputStream.available()];
	fileInputStream.read(bytes);

	String str = new String(bytes);
	str = str.replaceAll("\\\\n","\n");

	for (byte b : str.getBytes()) {
		System.out.println(b);
	}

结果:

65
10
65

(⊙o⊙)…居然对了,果然这边坑还是有的。

相关推荐