標籤:protoc 不同的 proc equal 完整 位置 標記 逗號 html
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")) break;
System.out.println(">>>" + line);
}
}
}
請輸入字串:
234
>>>234
wer
>>>wer
bye
>>>bye
exit
Process finished with exit code 0
先寫這裡吧,有空再繼續完善。
二、如果說Scanner使用簡便,不如說Scanner的構造器支援多種方式,構建Scanner的對象很方便。
可以從字串(Readable)、輸入資料流、檔案等等來直接構建Scanner對象,有了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是一個基於Regex的文本掃描器,它可以從檔案、輸入資料流、字串中解析出基本類型值和字串值。Scanner類提供了多個構造器,不同的構造器可接受檔案、輸入資料流、字串作為資料來源,用於從檔案、輸入資料流、字串中解析資料。
Scanner類的常用方法
- hasNextXXX():是否還有下一個輸入項,其中XXX可以是Int、Long等代表基礎資料型別 (Elementary Data Type)的字串。如果需要判斷是否包含下一個字串,則可以省略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