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);
}
}
}
* 掃描控制台輸入
*
* @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
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());
}
}
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
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
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()
此掃描器執行當前行,並返回跳過的輸入信息。
返回此 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());
}
}
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;
/**
* ��һ������թƭ��վ�Զ��ύ������Ϣ�ij����ÿտ�������һ�¡�
* @author wangpeng
*
*/
public class AutoSubmit {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
...在此省略N行
Process finished with exit code 0
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;
/**
* ��һ������թƭ��վ�Զ��ύ������Ϣ�ij����ÿտ�������һ�¡�
* @author wangpeng
*
*/
public class AutoSubmit {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
...在此省略N行
Process finished with exit code 0
Java對字符串支持還是比較弱的,盡管Java一直在努力。
Java的確
老勢已經下來了,越來越龐大臃腫,往昔的輝煌正成為Java前進路上的絆腳石,為了向后兼容,為了平穩的過度,不得不做很多痛苦的選擇。
如果Java能直接出Java III,完全拋棄現有的糟粕,全新設計語法和風格。Java也許會繼續輝煌下去。
