1.问题发现:
在学习转义字符时,编写了如下代码:
import java.io.*;
public class RN
{
public static void main(String[] args)
{
String str="we are\r\n young";
System.out.print("We are\r\nyoung");
byte [] bytes=new byte[50];
bytes=str.getBytes();
int len=bytes.length;
try
{
File test=new File("c:/Data/data.txt");
if(!test.exists())
test.createNewFile(); //创建文件
FileOutputStream output=new FileOutputStream("c:/Data/data.txt");
output.write(bytes, 0, len); //输入字符串
output.close();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
{
public static void main(String[] args)
{
String str="we are\r\n young";
System.out.print("We are\r\nyoung");
byte [] bytes=new byte[50];
bytes=str.getBytes();
int len=bytes.length;
try
{
File test=new File("c:/Data/data.txt");
if(!test.exists())
test.createNewFile(); //创建文件
FileOutputStream output=new FileOutputStream("c:/Data/data.txt");
output.write(bytes, 0, len); //输入字符串
output.close();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
在java控制台输出中,(1)"We are\nyoung";(2)"We are\ryoung";(3)"We are\r\nyoung";(4)"We are\n\ryoung";
以上4种表达的效果中(1)(2)(3)是一样的,都是:
We are
young
而(4)是:
We are
young
在windows的txt中,却发现(1)(2)(4)是一样的:We are young
而在(3)中,却可以达到效果: We are
young
在windows的txt中,却发现(1)(2)(4)是一样的:We are young
而在(3)中,却可以达到效果: We are
young
2.分析:
在不同的平台上,表达效果是不同的!
这是历史遗留问题:
以前的某打字机每行末有“同行回车\r”“同列换行\n”两布操作。计算机发明后,为节省存储器,只用一个字符来表示,于是到现在“回车换行”操作有:
Mac :\r; Unix\Linux: \n; Windows:\r\n;
3.解决方法:
为了避免错误输出:所有换行(即同行回车后再换行)写为“\r\n”。
另外,如果不确定,通过System.out.println(System.getProperty("line.separator"))可以知道换行符!