上一次說java沒有c++裏類似cin這樣的從控制檯讀取的命令,其實不對。今天介紹的Scanner這個類是java 5新增加的類,不僅使用方便,功能更是強大。先來看一個簡單的例子:
import java.util.*;
public class ScannerTest {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
double a=scanner.nextDouble();
System.out.println(a);
}
}
運行
輸入 一個任意數然後輸出這個數
注意粗體字的地方,這一行就實現了從控制檯輸入數字的功能,如果要輸入字符串
可以用
String a=scanner.next();//注意不是nextString()
Scanner還可以直接掃描文件。比如(有點長,耐心一點):
import java.util.*;
import java.io.*;
public class ScannerTest {
public static void main(String[] args) throws IOException{//這裏涉及到文件io操作
double sum=0.0;
int count=0;
FileWriter fout=new FileWriter("text.txt");
fout.write("2 2.2 3 3.3 4 4.5 done");//往文件裏寫入這一字符串
fout.close();
FileReader fin=new FileReader("text.txt");
Scanner scanner=new Scanner(fin);//注意這裏的參數是FileReader類型的fin
while(scanner.hasNext()){//如果有內容
if(scanner.hasNextDouble()){//如果是數字
sum=sum+scanner.nextDouble();
count++;
}else{
String str=scanner.next();
if(str.equals("done")){
break;
}else{
System.out.println("文件格式錯誤!");
return;
}
}
}
fin.close();
System.out.println("文件中數據的平均數是:"+sum/count);
}
}
結果輸出文件中數據的平均數是:3.1666666666666665
這段程序的功能是將"2 2.2 3 3.3 4 4.5 done"寫入文件scanner讀取文件中的數直到done結束。並求出數字的平均值,比較有意思的是scanner會自動一空格作爲分割符區分不同數字。當然也可以通過scanner.useDelimiter(Pattern pattern)來設置不同的分割符,比如 scanner.useDelimiter(",*");
如果你感興趣,更多強大的功能可以參看jdk 5 的幫助文檔
本文出自 “Xhinker” 博客,請務必保留此出處http://xhinker.blog.51cto.com/640011/133575
===========================================================================================================
Java代碼
1. java.util.Scanner的總結
2. //構造方法(常用的三個)
3. //Scanner(File source)
4. //Scanner(InputStream source)
5. //Scanner(String source)
6.
7. //對比兩種方式的比較
8. //Scanner sc=new Scanner(System.in);
9. //BufferedReader br=new BufferedReader(new InputStreamReader(System.in))
10.
11. //方法
12. //useDelimiter(Pattern pattern)改變token的分割方式,默認的是空格,傳Pattern對象
13. //useDelimiter(String pattern)改變token的分割方式,默認的是空格,傳String
14.
15. //hasNext();查看是否有token的分割段
16. //hasNextInt();查看是否有int類型的token的分割段
17. //nextInt();返回下一個int的數值
18. //nextLine();返回一行
19.
20. //hasNext(Pattern pattern);返回下一個pattern類型的token
21.
22. public class ScannerTest {
23. public static void main(String[] args){
24. String str = "1.1 22.2 s 4 5.3 6 7.5 8 9";
25. Scanner scanner = new Scanner(str);
26. //scanner.useDelimiter("//.");
27. while(scanner.hasNext()){
28. if(scanner.hasNext(Pattern.compile("//d//.//d"))){
29. System.out.println(scanner.next());
30. }else{
31. scanner.next();//要調用一下next()相關的方法纔會到下一個token
32. }
33. }
34. }
35. }
36.
37. 結果:
38. 1.1
39. 5.3
40. 7.5
41.
42.
43. public class ScannerTest {
44. public static void main(String[] args){
45. String str = "1.2 s.4 5 6.7 8 9";
46. Scanner scanner = new Scanner(str);
47. //token以.分割
48. scanner.useDelimiter("//.");
49. while(scanner.hasNext()){
50. System.out.println(scanner.next());
51. }
52. }
53. }