我们在测试项目中经常会遇到这样的情形:

1. 从文件或网络得到一个InputStream,需要转换成String赋值到别的变量做为另一个方法的入参。

2. 从文件或网络得到一个InputStream后,需要查看得到的InputStream是不是我们所需要的。

下面主要分析如何使用Scanner来处理。

从 JDK 5.0 开始,基本类库中增加了java.util.Scanner类,使用它的Scanner(InputStream source)构造方法,可以传入InputStream,通过它提供的next()方法;查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,默认使用空格作为分割符来分隔文本,可以自定义分隔符。

下面是一个简单的例子:

从文件c:/test.txt读取输入流,传入scanner对象,通过next(方法)查找字符串文本,然后打印字符串文本。这样我们就成功的完成了转换。

     public static void main(String[] args) throws IOException {

         InputStream inputStream = new FileInputStream("c:/test.txt");
Scanner scanner = new Scanner(inputStream, "UTF-8");
String sc = scanner.next();
System.out.println(sc);
scanner.close();
}

上面代码是默认使用空格作为分割符来分隔文本,也可以自己定义分隔符,比如我们用逗号“,”作为分隔符。那么输入流中逗号以后的内容都不会传给sc了。

public static void main(String[] args) throws IOException {

        InputStream inputStream = new FileInputStream("c:/test.txt");
Scanner scanner = new Scanner(inputStream, "UTF-8");
String sc = scanner.useDelimiter(",").next();
System.out.println(sc);
scanner.close();
}

下面将知识拓展一下,

以上的输入流是来自文件,那么要是输入流来自console呢?

    public static void main(String[] args) throws IOException {

        Scanner scanner = new Scanner(System.in, "UTF-8");
String sc = scanner.useDelimiter(",").next();
System.out.println(sc);
scanner.close();
}

输入abc edf wefw,weew,few

输出:abc edf wefw

我们可以看到逗号的文本都没有打印,这是因为next() 方法遇见第一个有效字符(非空格,换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描。

我们再来看看nextLine()方法,nextline()是以回车作为结束标志,它是可以得到带空格的字符串的.

    public static void main(String[] args) throws IOException {

        Scanner scanner = new Scanner(System.in, "UTF-8");
String sc = scanner.useDelimiter(",").nextLine();
System.out.println(sc);
scanner.close();
}

输入abc edf wefw,weew,few

输出abc edf wefw,weew,few

需要注意的是,如果输入流是文件,那么nextLine()方法将只返回文件的第一行。

使用Scanner将InputStream类型转换成String的更多相关文章

  1. Java 把 InputStream 转换成 String 的几种方法

    我们在 Java 中经常会碰到如何把 InputStream 转换成 String 的情形,比如从文件或网络得到一个 InputStream,需要转换成字符串输出或赋给别的变量. 未真正关注这个问题之 ...

  2. Java 里把 InputStream 转换成 String 的几种方法

    我们在 Java 中经常会碰到如何把 InputStream 转换成 String 的情形,比如从文件或网络得到一个 InputStream,需要转换成字符串输出或赋给别的变量. 未真正关注这个问题之 ...

  3. oracle Clob类型转换成String类型

    转载:https://www.cnblogs.com/itmyhome/p/4131339.html Clob类型转换成String类型 oracle中表结构如下: create table GRID ...

  4. Clob类型转换成String类型

    oracle中表结构如下: create table GRID_RESOURCE ( ID VARCHAR2(50), CNNAME VARCHAR2(50), TYPE VARCHAR2(50), ...

  5. oracle.sql.Clob类型转换成String类型

    方法一: public String ClobToString(Clob clob) throws SQLException, IOException { String reString = &quo ...

  6. 如何将Object类型转换成String类型

    1. Object.toString() obj.toString() 注意:必须保证Object不是null值,否则将抛出NullPointerException异常. 2. (String)Obj ...

  7. int类型转换成String , 不足n位 在前面补0

    1.String.format("%02d", 5);-->结果:05 0代表前面要补的字符 2代表字符串长度 d表示参数为整数类型 2.秒转换成时分秒 private St ...

  8. Java中Clob类型转换成String类型的问题

    1.问题: 项目中使用druid+达梦数据库(基本类似Oracle),查出的Clob类型数据在运行时为ClobProxyImpl对象而不是内容,不能转为字符串 2.原代码: map为达梦数据库或Ora ...

  9. Java,double类型转换成String,String装换成double型

    今天,老师布置了小系统,银行用户管理系统,突然发现自己的基础知识好薄弱,就把这些记录一下, double类型转化string:Double.toString(double doub); String类 ...

随机推荐

  1. JFrame自适应大小

    pack();函数调用PreferedSize(); 所以对于组件要setPreferedSize();

  2. JavaScript(JS)计算某年某月的天数(月末)

    方法1 /** * 获取某年月的天数 * @param year 年 * @param month 月(0-11) * @returns {number} 天数 */ var getDaysOfMon ...

  3. docker 容器启动并自启动redis

    centos7.5 背景:每次开机后都要自动启动redis,也就是宿主机开机,启动容器,然后启动redis 按照网上的做法是:修改redis.conf ,修改redis的启动脚本(utils/...s ...

  4. Maven+Spring+MySql 登陆实例

    近来无事,复习复习Spring相关知识,从<Spring企业应用开发实战>这本书开始. 本文为学习<Spring企业应用开发实战>总结,著作权归原作者. 一.用Maven建立w ...

  5. thinkphp 手机号和用户名同时登录

    //在注册时用户名不能是纯数字, 防止一个人的用户名和另一个人的手机号相同public function Login(){ if (IS_AJAX) { $username = I('param.us ...

  6. python caser运行编码

    #!/usr/bin/env python# -*- coding:utf-8 -*-import os def encryption(): str_raw = raw_input("请输入 ...

  7. USG防火墙基础

    http://support.huawei.com/huaweiconnect/enterprise/thread-331003.html 华为防火墙产品线 安全区域 1.     默认防火墙区域 T ...

  8. iOS线程和进程的区别和联系

    线程和进程的区别主要在于它们是不同的操作系统资源管理方式.进程有独立的地址空间,一个进程崩溃后,在保护模式的影响下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径.线程有自己的堆栈和局部变量 ...

  9. Codeforces Round #411 B. 3-palindrome

    B. 3-palindrome time limit per test 1 second memory limit per test 256 megabytes   In the beginning ...

  10. 解决MFC对话框类不能建立成功的方法(出现unable to open the files XX for class XX)

    原文:http://blog.163.com/wangqi1973_off/blog/static/131034571201011885546230 为新加的对话框资源添加新类,类名取做CColorV ...