萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> java.util.Scanner應用詳解

java.util.Scanner應用詳解

 java.util.Scanner獲取輸入的整數,長整型,字符串等:

 代碼如下  

/package com.color.program.ball;
 
import java.util.Scanner;
 
public class ScannerTest {
 
 public static void main(String[] args) {
  Scanner s = new Scanner(System.in);
  //receive string
  String str = s.next();
  
  //receive integer
  Integer i = s.nextInt();
  
  //receive double
  Double d = s.nextDouble();
  
  System.out.println(str+i+d);
 }
}
 
 
如用三元運算符判斷一個數是奇數還是偶數:

import   java.util.Scanner;
 
public   class   Ou {
 public   static   void  main(String[]  args)  {
 
 System.out.println("請輸入一個整數:");
 Scanner     reader = new  Scanner(System.in);
 long    a =  reader.nextLong();
 String str = (a%2 )==0   ?     "偶數":"奇數";
 System.out.println("結果是:"+str);
 
 
 }
 
 
 
}

 
一、掃描控制台輸入
這個例子是常常會用到,但是如果沒有Scanner,你寫寫就知道多難受了。
當通過new Scanner(System.in)創建一個Scanner,控制台會一直等待輸入,直到敲回車鍵結束,把所輸入的內容傳給Scanner,作為掃描對象。如果要獲取輸入的內容,則只需要調用Scanner的nextLine()方法即可。

 代碼如下   /**
* 掃描控制台輸入
*
* @author leizhimin 2009-7-24 11:24:47
*/
public class TestScanner {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("請輸入字符串:");
while (true) {
String line = s.nextLine();
if (line.equals("exit")) break;
System.out.println(">>>" + line);
}
}
}
請輸入字符串:
234
>>>234
wer
>>>wer
bye
>>>bye
exitProcess finished with exit code 0

先寫這裡吧,有空再繼續完善。
二、如果說Scanner使用簡便,不如說Scanner的構造器支持多種方式,構建Scanner的對象很方便。
可以從字符串(Readable)、輸入流、文件等等來直接構建Scanner對象,有了Scanner了,就可以逐段(根據正則分隔式)來掃描整個文本,並對掃描後的結果做想要的處理。

 代碼如下  

package test;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.regex.MatchResult;
 
public class TestScanner {
 
 public static void main(String[] args) throws FileNotFoundException {
 // 鍵盤輸入
 Scanner sc = new Scanner(System.in);
 System.out.println(sc.nextInt());
 
 System.out.println("---------------");
 
 // 文本掃描
 Scanner sc2 = new Scanner(new File("D://1.txt"));
 while (sc2.hasNextDouble()) {
 System.out.println(sc2.nextDouble());
 }
 
 System.out.println("---------------");
 
 // 正則解析
 String input = "1 fish 2 fish red fish blue fish";
 Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
 System.out.println(s.nextInt());
 System.out.println(s.nextInt());
 System.out.println(s.next());
 System.out.println(s.next());
 s.close();
 
 System.out.println("---------------");
 
 // 正則-匹配組
 String input2 = "1 fish 2 fish red fish blue fish";
 Scanner s2 = new Scanner(input2);
 s2.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
 MatchResult result = s2.match();
 for (int i = 1; i <= result.groupCount(); i++)
 System.out.println(result.group(i));
 s.close();
 }
 
}


以下代碼使 long 類型可以通過 myNumbers 文件中的項分配:

 代碼如下   Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
long aLong = sc.nextLong();
}

 
三、Scanner默認使用空格作為分割符來分隔文本,但允許你指定新的分隔符(支持正則表達式)
使用默認的空格分隔符:
 

 代碼如下   public static void main(String[] args) throws FileNotFoundException {
Scanner s = new Scanner("123 asdf sd 45 789 sdf asdfl,sdf.sdfl,asdf    ......asdfkl    las");
//                s.useDelimiter(" |,|\\."); 
while (s.hasNext()) {
System.out.println(s.next());
}
}
123
asdf
sd
45
789
sdf
asdfl,sdf.sdfl,asdf
......asdfkl
lasProcess finished with exit code 0
將注釋行去掉,使用空格或逗號或點號作為分隔符,輸出結果如下:
123
asdf
sd
45
789
sdf
asdfl
sdf
sdfl
asdfasdfkllas
Process finished with exit code 0

再來個例子,根據pattern字符串來匹配

 代碼
copyright © 萬盛學電腦網 all rights reserved