前几天遇到一个问题,就是同样的换行字符在java代码中可以成功,而从文件中定义的的则无效而且直接显示成了'\n',怎一个大写的懵逼啊!
看来应该是字符串的问题,来研究下两种方式的字符数组的字节是怎么样的。
首先来一个实验
String str = "A\nA";
for (byte b : str.getBytes()) {
System.out.println(b);
}
结果:
也就是说\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);
}
结果:
差别出来了,\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
不就大功告成了嘛。
结果一脸闷逼:
不过想想\`这个符号好像在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);
}
结果:
(⊙o⊙)…居然对了,果然这边坑还是有的。
尊重作者,转载请注明出处!
版权申明:本文版权归作者所有,未经授权,任何单位或个人不得以任何形式转载、摘编或利用其它方式使用本博客内容。作者保留追究相关法律责任的权利。如需使用博客内容,请与作者联系获得授权。感谢对本文的尊重与支持。
免责声明:本网站所载内容仅供参考,不构成任何专业建议。用户基于本网站内容作出的决策,风险自担。对于因使用本网站内容而产生的任何直接或间接损失,本网站不承担任何责任。请用户审慎判断,理性使用。