• 使用Scanner将InputStream类型转换成String


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

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

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

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

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

    下面是一个简单的例子:

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

    1     public static void main(String[] args) throws IOException {
    2         
    3         InputStream inputStream = new FileInputStream("c:/test.txt");
    4         Scanner scanner = new Scanner(inputStream, "UTF-8");
    5         String sc = scanner.next();
    6         System.out.println(sc);
    7         scanner.close();
    8     }

    上面代码是默认使用空格作为分割符来分隔文本,也可以自己定义分隔符,比如我们用逗号“,”作为分隔符。那么输入流中逗号以后的内容都不会传给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()方法将只返回文件的第一行。

  • 相关阅读:
    乐观锁和悲观锁
    c++ inline使函数实现可以在头文件中,避免多重定义错误
    无锁队列的实现
    同步异步阻塞非阻塞
    log(m+n)找第k大
    ios开发常见的 工具 - 值得收藏
    iOS 性能优化得 方法
    搭建 安卓开发环境 !
    项目支持 64 - bit
    AFN学习笔记
  • 原文地址:https://www.cnblogs.com/clarke157/p/6605655.html
Copyright © 2020-2023  润新知