java utill scanner_(转)java.util.Scanner应用详解
java.util.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 {
...在此省略N行
Process finished with exit code 0
Java對字符串支持還是比較弱的,盡管Java一直在努力。
Java的確老勢已經下來了,越來越龐大臃腫,往昔的輝煌正成為Java前進路上的絆腳石,為了向后兼容,為了平穩的過度,不得不做很多痛苦的選擇。
如果Java能直接出Java III,完全拋棄現有的糟粕,全新設計語法和風格。Java也許會繼續輝煌下去。
自己寫了個控制臺輸入數組并獲取數組的例子:
import java.util.Arrays;
import java.util.Scanner;
public class Scanner02 {
public static void main(String[] args){
Scanner inScanner = new Scanner(System.in);
String string = inScanner.nextLine();
String[] sChar = string.split(",");
//String[] sChar = string.split(" "); //以空格作為分隔符
int[] nums = new int[sChar.length];
for(int i= 0;i
nums[i] = Integer.parseInt(sChar[i]);//string型轉換為int型
}
String nString = inScanner.nextLine(); //實現數據多行輸入
System.out.println(Arrays.toString(nums)); //輸出數組
System.out.println("n:"+Integer.parseInt(nString));
inScanner.close();
}
}
運行結果:
1,2,3,4,5
5
[1, 2, 3, 4, 5]
n:5
import java.util.Arrays;
import java.util.Scanner;
public class Scanner03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner inScanner = new Scanner(System.in);
int[] nums = new int[5];
/*while(inScanner.hasNext()){
System.out.println(inScanner.nextInt());
}*/
for(int i=0;i<5;i++){ //利用循環來存儲數組元素
nums[i] = inScanner.nextInt();
}
System.out.println(Arrays.toString(nums));
inScanner.close();
}
}
打印結果:
1 2 3 4 5
[1, 2, 3, 4, 5]
總結
以上是生活随笔為你收集整理的java utill scanner_(转)java.util.Scanner应用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 25家往昔明星网站“血泪史” 教你如何过
- 下一篇: kubelet cgroup drive