黑马程序员技术交流社区
标题:
求助 崩溃了
[打印本页]
作者:
唐林渊
时间:
2012-3-22 00:57
标题:
求助 崩溃了
本帖最后由 唐林渊 于 2012-3-22 09:17 编辑
崩溃啦 大家帮忙解释下 我是后面学 前面忘的.
import java.io.IOException;
/*
* 设计方法,使用System.in.read()读取一行.循环读取一个字节,读取到\r\n结束。
* abc\r\ndef\r\n
*/
public class Exercise4 {
public static void main(String[] args) throws IOException {
System.out.println(readLine());
System.out.println(readLine());
System.out.println(readLine());
}
public static String readLine() throws IOException{
StringBuilder sb = new StringBuilder();
while(true){
byte b = (byte) System.in.read(); // 从键盘输入读取一个字节 <1>
if(b == '\r') // 判断如果是\r或\n, 就代表遇到了行末尾
continue;
if(b == '\n')
break;
if(b < 0){ // 如果小于0, 代表是中文
byte b1 = (byte)System.in.read(); // 再读一个字节
byte[] arr = {b, b1}; // 把2个字节装入一个数组
String s = new String(arr); // 将数组转为字符串
sb.append(s); // 添加到StringBuilder
}else
sb.append((char)b); // 如果不是\r或\n, 就用StringBuilder存起来 <2>char??
}
return sb.toString();
}
}
第一问
< 1>这个地方为什么强转为byte类型,别的类型不可以吗?就比如说直接转为char,<2>不是不用转了吗? 还有<2>为什么要转为char??
还有就是
byte b = (byte) System.in.read(); //这个已经转化为字节了
if(b == '\r') // 字节和字符可以进行比较吗? '\r'是字符类型吧
continue;
if(b == '\n')
break;
作者:
田斌
时间:
2012-3-22 01:08
<1>里用char也行,<2>append()方法里接收的是char类型所以得强转
作者:
刘元霄
时间:
2012-3-22 04:45
<1> read() 的返回类型是int型, 所以得转;
<2> b已经转型了 StringBuilder 不接收整数的吧 所以要来回转咯。
作者:
H07000223
时间:
2012-3-22 08:55
为什么好要区分中文非中问呢,你只把system.in转换成字符流就是了。
BufferedReader br=new BufferedReader(new InputStreamReader(System.in))
作者:
李东志
时间:
2012-3-22 09:43
你好,建议你这样理解比较简单:
System.in是字节流,操作后自然变成了字节,即byte;
StringBuilder.append()是操作字符串的方法,所以要将原始字节b转为字符串(字符类型char可以组成字符串);
还有 猜想,导包应该是import java.io.*; 吧?
作者:
唐林渊
时间:
2012-3-23 09:11
李东志 发表于 2012-3-22 09:43
你好,建议你这样理解比较简单:
System.in是字节流,操作后自然变成了字节,即byte;
StringBui ...
高手 谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2