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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hello菜菜 中级黑马   /  2013-10-12 19:39  /  1274 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hello菜菜 于 2013-10-14 11:07 编辑

当需要提取用户输入的数据时,既可以通过Scanner类实现,也可以通过InputStreamReader转换流进行实现,两者的区别在哪?一般用哪个呢?

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

3 个回复

倒序浏览
一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器。Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。 每次调用 InputStreamReader 中的一个 read()() 方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
  1. import java.io.IOException;
  2. import java.io.InputStreamReader;

  3. public class Test1 {
  4.     public static void main(String[] args) {
  5.           String str = readString("请输入字符串:");
  6.           System.out.println("readString 方法的输入:" + str);
  7.       }
  8.     private static String readString(String prompt) {
  9.           BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  10.           String str = null;
  11.          try {
  12.               System.out.print(prompt);
  13.               str = br.readLine();
  14.           } catch (IOException e) {
  15.               e.printStackTrace();
  16.           }
  17.          return str;
  18.       }
  19. }
复制代码
JDK 1.4 及以下的版本中要想从控制台中输入数据只有一种办法,即使用System.in获得系统的输入流,再用转换流InputStreamReader和包装流BufferedReader来获取键盘的输入数据。而且有个很大的缺点,只能获取字符串,还得自己手动去强转。
但是这样太麻烦了,于是JDK5.0中提供了Scanner,其实并不是Scanner将控制台输入给简单化了,只是在其内部的实现中已经将IOException处理了,而且采用InputStreamReader来一个字符一个字符进行扫描读取的,只是Scanner做了更高层次的封装。而且它可以读任何类型的数据,多方便啊。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-13 13:52:44
板凳
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马