使用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()方法將只返回文件的第一行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM