A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 唐林渊 黑马帝   /  2012-3-22 00:57  /  1725 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐林渊 于 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;
                       

5 个回复

倒序浏览
<1>里用char也行,<2>append()方法里接收的是char类型所以得强转
回复 使用道具 举报
<1>  read() 的返回类型是int型, 所以得转;
<2>    b已经转型了  StringBuilder  不接收整数的吧 所以要来回转咯。  
回复 使用道具 举报
为什么好要区分中文非中问呢,你只把system.in转换成字符流就是了。

BufferedReader br=new BufferedReader(new InputStreamReader(System.in))
回复 使用道具 举报
你好,建议你这样理解比较简单:
    System.in是字节流,操作后自然变成了字节,即byte;
       StringBuilder.append()是操作字符串的方法,所以要将原始字节b转为字符串(字符类型char可以组成字符串);
    还有 猜想,导包应该是import java.io.*; 吧?
回复 使用道具 举报
李东志 发表于 2012-3-22 09:43
你好,建议你这样理解比较简单:
    System.in是字节流,操作后自然变成了字节,即byte;
       StringBui ...

高手  谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马