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()方法即可。
先寫這裡吧,有空再繼續完善。
二、如果說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默認使用空格作為分割符來分隔文本,但允許你指定新的分隔符(支持正則表達式)
使用默認的空格分隔符:
再來個例子,根據pattern字符串來匹配
代碼如下 package test;useDelimiter(Pattern pattern)這個方法是Scanner中用於設置分隔符的,默認情況下scanner分割符是空格,你這 個程序中就是用正則表達式來設置分隔符,"\\s*fish\\s*"前面的一個\\s*表示空格出現0次或多次接著出現fish接著出現0個或多個空 格,只要scanner掃描遇到的數據符合這個正則表達式,前面的就當一個數據就可以用Scanner中的next()返回取得數據。
總結:1)多種輸入,File,input,System.in,String等
2)與正則結合使用
3)實現了Iterator接口
四、一大堆API函數,實用的沒幾個
(很多API,注釋很讓人迷惑,幾乎毫無用處,這個類就這樣被糟蹋了,啟了很不錯的名字,實際上做的全是龌龊事)
下面這幾個相對實用:
delimiter()
返回此 Scanner 當前正在用於匹配分隔符的 Pattern。
hasNext()
判斷掃描器中當前掃描位置後是否還存在下一段。(原APIDoc的注釋很扯淡)
hasNextLine()
如果在此掃描器的輸入中存在另一行,則返回 true。
next()
查找並返回來自此掃描器的下一個完整標記。
nextLine()
此掃描器執行當前行,並返回跳過的輸入信息。
五、逐行掃描文件,並逐行輸出
看不到價值的掃描過程
public static void main(String[] args) throws FileNotFoundException {
InputStream in = new FileInputStream(new File("C:\\AutoSubmit.java"));
Scanner s = new Scanner(in);
while(s.hasNextLine()){
System.out.println(s.nextLine());
}
}
package own;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import com.verisign.uuid.UUID;
/**
* @author wangpeng
*
*/
public class AutoSubmit {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
...在此省略N行
Process finished with exit code 0