我們在測試項目中經常會遇到這樣的情形:
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()方法將只返回文件的第一行。
