java 中的Scanner
java 中的Scanner(非常詳細不看後悔)
java.util.Scanner是Java5的新特征,主要功能是簡化文本掃描。這個類最實用的地方表現在獲取控制臺輸入,其他的功能都很雞肋,盡管Java API文檔中列舉了大量的API方法,但是都不怎麽地。
一、掃描控制臺輸入
這個例子是常常會用到,但是如果沒有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"
System.out.println(">>>" + line);
}
}
}
請輸入字符串:
234
>>>234
wer
>>>wer
bye
>>>bye
exit
Process finished with exit code 0
先寫這裏吧,有空再繼續完善。
二、如果說Scanner使用簡便,不如說Scanner的構造器支持多種方式,構建Scanner的對象很方便。
可以從字符串(Readable)、輸入流、文件等等來直接構建Scanner對象
三、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
las
Process finished with exit code 0
將註釋行去掉,使用空格或逗號或點號作為分隔符,輸出結果如下:
123
asdf
sd
45
789
sdf
asdfl
sdf
sdfl
asdf
asdfkl
las
Process finished with exit code 0
四、一大堆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 {
附:
Scanner類說明
使用Scanner類可以很方面地獲取用戶的鍵盤輸入,Scanner是一個基於正則表達式的文本掃描器,它可以從文件、輸入流、字符串中解析出基本類型值和字符串值。Scanner類提供了多個構造器,不同的構造器可接受文件、輸入流、字符串作為數據源,用於從文件、輸入流、字符串中解析數據。
Scanner類的常用方法
- hasNextXXX():是否還有下一個輸入項,其中XXX可以是Int、Long等代表基本數據類型的字符串。如果需要判斷是否包含下一個字符串,則可以省略XXX。
- nextXXX():獲取下一個輸入項。XXX的含義與前一個方法中XXX相同。
代碼示例1
Java代碼
- <strong>import java.util.Scanner;
- public class ScannerKeyBoardTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // System.in代表標準輸入,就是鍵盤輸入
- Scanner sc = new Scanner(System.in);
- // 增加下面一行將只把回車作為分隔符
- // sc.useDelimiter("\n");
- // 判斷是否還有下一個輸入項
- while(sc.hasNext())
- {
- // 輸出輸入項
- System.out.println("鍵盤輸入的內容是:"
- + sc.next());
- }
- }
- }</strong>
運行結果1
hello
鍵盤輸入的內容是:hello
welcome
鍵盤輸入的內容是:welcome
go
鍵盤輸入的內容是:go
運行結果2
當去掉sc.useDelimiter("\n");的註釋,運行結果如下:
line 1
鍵盤輸入的內容是:line 1
line 2
鍵盤輸入的內容是:line 2
line 3
鍵盤輸入的內容是:line 3
代碼示例2
Java代碼- import java.util.Scanner;
- public class ScannerLongTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // System.in代表標準輸入,就是鍵盤輸入
- Scanner sc = new Scanner(System.in);
- // 判斷是否還有下一個long型整數
- while(sc.hasNextLong())
- {
- // 輸出輸入項
- System.out.println("鍵盤輸入的內容是:"
- + sc.nextLong());
- }
- }
- }
運行結果
12
鍵盤輸入的內容是:12
34
鍵盤輸入的內容是:34
56
鍵盤輸入的內容是:56
代碼說明
Scanner可以獲取任何基本類型的輸入項目。
代碼示例3
Java代碼- import java.io.File;
- import java.util.Scanner;
- public class ScannerFileTest {
- public static void main(String[] args) throws Exception {
- // 將一個File對象作為Scanner的構造器參數,Scanner讀取文件內容
- Scanner sc = new Scanner(new File("ScannerFileTest.java"));
- System.out.println("ScannerFileTest.java文件內容如下:");
- // 判斷是否還有下一行
- while(sc.hasNextLine())
- {
- // 輸出文件中的下一行
- System.out.println(sc.nextLine());
- }
- }
- }
運行結果
F:\java\workspace\first\bin>java ScannerFileTest
ScannerFileTest.java文件內容如下:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ScannerFileTest {
public static void main(String[] args) throws FileNotFoundException {
// 將一個File對象作為Scanner的構造器參數,Scanner讀取文件內容
Scanner sc = new Scanner(new File("ScannerFileTest.java"));
System.out.println("ScannerFileTest.java文件內容如下:");
// 判斷是否還有下一行
while(sc.hasNextLine())
{
// 輸出文件中的下一行
System.out.println(sc.nextLine());
}
}
}
代碼說明
此代碼創建Scanner對象時傳入一個File對象作為參數,這表明該程序會讀取ScannerFileTest.java文件中的內容。此代碼使用了hasNextLine和nextline兩個方法讀取文件內容。
Java對字符串支持還是比較弱的,盡管Java一直在努力。
http://bbs.itheima.com/thread-90856-1-1.html
(出處: 黑馬程序員IT技術論壇)
java 中的Scanner