编程实例:
将键盘上输入的字节逐一存储到一个数组中,当遇到回车换行符的时候,数组中的内容被转换成一个字符串,在屏幕上进行打印显示,如此重复直到键盘上输入的一行内容为”bye”时,就结束程序的运行
public class ReadLine {
/**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) {
// TODO: Add your code here
byte[] buf=new byte[1024];
String strInfo=null;
int pos=0;
int ch=0;
System.out.println("please enter info:");
while(true)
{
try{
ch=System.in.read();
}catch(Exception e){e.printStackTrace();}
switch(ch)
{
case'\r':
break;
case'\n':
strInfo=new String(buf,0,pos);
if(strInfo.equalsIgnoreCase("bye"))
{
return;
}
else
{
System.out.println(strInfo);
pos=0;
break;
}
default:
buf[pos++]=(byte)ch;
}
}
}
}
当我们在键盘上按下回车键的时候window操作系统会把按下回车这个动作当作\r和\n这个两个字符输入,也就等于一下子就输入了两个字符而unix操作系统就把按下回车键当作一个\n这个字符来输入,不管在什么操作系统上我们都可以用\n来作为一行输入结束的结束标记,只是在编程的时候我们需要注意如果是windows操作系统那么它会读取到\r这个字符,我们必须将这个字符与正常输入的普通字符区别开来,不让这个字符存储到上面程序中的buf数组里面去,如果不对其进行break处理,那么你输入abc字符后按下回车得到的打印效果就为abc\r。
如果你用的开发软件是Jbuilder,不管在什么操作系统中Jbuilder都把输入窗口中的回车换行符只用一个\n来表示,而有些人在编程的时候忽略了\r字符的存在可能而没有对\r字符进行专门的处理导致在Jbuilder环境下可以运行的程序到了windows下的JDK中运行的时候出现问题,比如说读取一个文件名叫abc.txt的文件,编程人员没有考虑\r在windows的JDK运行的时候实际上得到的内容为”abc.txt\r”
所有JDK去硬盘上读取文件的时候死活也读不到abc.txt\r,因为硬盘上只有abc.txt这个文件,但是在Jbuilder里面运行的时候没有问题,因为Jbuilder里面不会出现\r,这就是\r与\n需要注意的问题。
[ 本帖最后由 李龙涛 于 2011-07-20 10:03 编辑 ] |