激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Scanner用法案例詳解

Java Scanner用法案例詳解

2021-12-11 15:47魏曉蕾 Java教程

這篇文章主要介紹了Java Scanner用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

一、Scanner類簡介

      Java 5添加了java.util.Scanner類,這是一個用于掃描輸入文本的新的實用程序。它是以前的StringTokenizer和Matcher類之間的某種結合。由于任何數據都必須通過同一模式的捕獲組檢索或通過使用一個索引來檢索文本的各個部分。于是可以結合使用正則表達式和從輸入流中檢索特定類型數據項的方法。這樣,除了能使用正則表達式之外,Scanner類還可以任意地對字符串和基本類型(如int和double)的數據進行分析。借助于Scanner,可以針對任何要處理的文本內容編寫自定義的語法分析器。

二、Scanner類用法

      Scanner是SDK1.5新增的一個類,可使用該類創建一個對象。

      Scanner reader=new Scanner(System.in); 

      然后reader對象調用下列方法(函數),讀取用戶在命令行輸入的各種數據類型  

      next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShot() 

     上述方法執行時都會造成堵塞,等待用戶在命令行輸入數據回車確認.例如,擁護在鍵盤輸入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false。NextLine()等待用戶輸入一個文本行并且回車,該方法得到一個String類型的數據。

      Scanner的構造器支持多種方式,可以從字符串(Readable)、輸入流、文件等等來直接構建Scanner對象,有了Scanner了,就可以逐段(根據正則分隔式)來掃描整個文本,并對掃描后的結果做想要的處理。

      下面是一些API函數的用法:

      delimiter() :返回此 Scanner 當前正在用于匹配分隔符的 Pattern。
hasNext() :判斷掃描器中當前掃描位置后是否還存在下一段。(原APIDoc的注釋很扯淡)
hasNextLine() :如果在此掃描器的輸入中存在另一行,則返回 true。
next() :查找并返回來自此掃描器的下一個完整標記。
nextLine() :此掃描器執行當前行,并返回跳過的輸入信息。

三、Scanner類實例

(1)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.*;
public class Example
{
public static void main(String args[])
{
System.out.println("請輸入若干個數,每輸入一個數用回車確認");
System.out.println("最后輸入一個非數字結束輸入操作");
Scanner reader=new Scanner(System.in);
double sum=0;
int m=0;
while(reader.hasNextDouble())
{
    double x=reader.nextDouble();
    m=m+1;
    sum=sum+x;
}
System.out.printf("%d個數的和為%f\n",m,sum);
System.out.printf("%d個數的平均值是%f\n",m,sum/m);
}
}

?      ?運行結果:

      C:\java>java     

      請輸入若干個數,每輸入一個數用回車確認

      最后輸入一個非數字結束輸入操作

      34.13445

      3個數的和為113.100000

      3個數的平均值是37.700000

(2)讀取并分析文本文件:hrinfo.txt

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class readhuman {
private static void readfile(String filename) {
try {
   Scanner scanner = new Scanner(new File(filename));
   scanner.useDelimiter(System.getProperty("line.separator"));
   while (scanner.hasNext()) {
      parseline(scanner.next());
   }
   scanner.close();
}catch (FileNotFoundException e) {
   System.out.println(e);
}
}
private static void parseline(String line) {
    Scanner linescanner = new Scanner(line);
    linescanner.www.gzlij.com useDelimiter(",");
    //可以修改usedelimiter參數以讀取不同分隔符分隔的內容
    String name = linescanner.next();
    int age = linescanner.nextInt();
    String idate = linescanner.next();
    boolean iscertified = linescanner.nextBoolean();
    System.out.println("姓名:"+name+" ,年齡:"+ age+" ,入司時間:"+ idate+" ,驗證標記:"+iscertified );
}
public static void main(String[] args) {
    if (args.length != 1) {
   System.err.println("usage: java readhuman file location");
   System.exit(0);
    }
   readfile(args[0]);
}
}

      運行結果:C:\java>java     readhuman hrinfo.txt

      姓名:老趙 ,年齡:28 ,入司時間:feb-01 ,驗證標記:true

      姓名:小竹 ,年齡:22 ,入司時間:dec-03 ,驗證標記:false

      姓名:阿波 ,年齡:21 ,入司時間:dec-03 ,驗證標記:false

      姓名:凱子,年齡:25 ,入司時間:dec-03 ,驗證標記:true

(3)Scanner默認使用空格作為分割符來分隔文本,但允許你指定新的分隔符

使用默認的空格分隔符:

?
1
2
3
4
5
6
7
        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 

--將注釋行去掉,使用空格或逗號或點號作為分隔符,輸出結果如下:
123 
asdf 
sd 
45 
789 
sdf 
asdfl 
sdf 
sdfl 
asdf 


asdfkl 

las 

四、Scanner報錯:java.util.NoSuchElementException

【問題描述】代碼如下:

?
1
2
3
4
5
String str1 = input1.nextLine();
input1.close();
Scanner input2 = new Scanner(System.in);
String str2 = input2.nextLine();
input2.close();

【報錯原因】在第二次使用Scanner之前調用了close方法。而在關閉的時候,會把System.in也關閉了。當下次new一個讀取的時候,因為輸入流已經關閉,所以讀取的值就是-1;在Scanner 的readinput方法里面有以下代碼。

?
1
2
3
4
5
6
7
8
9
10
11
try {
            n = source.read(buf);
        } catch (IOException ioe) {
            lastException = ioe;
            n = -1;
        }
 
        if (n == -1) {
            sourceClosed = true;
            needInput = false;
        }

      因為讀到了-1就設置sourceClosed =true;neepinput=false; 在next方法里面有以下代碼:

?
1
2
3
4
if (needInput)
    readInput();
else
    throwFor();

      當needinput為false,就執行throwFor,因此再看throwFor

?
1
2
3
4
5
skipped = false;
if ((sourceClosed) && (position == buf.limit()))
    throw new NoSuchElementException();
else
    throw new InputMismatchException();

      position 是當前讀取的內容在緩沖區中位置,因為讀取的是-1,因此position =0,而buf.limit()也等于0,因此就執行了throw new NoSuchElementException();

      【解決方案】將input1.close()放在input2.close()之上即可。

到此這篇關于Java Scanner用法案例詳解的文章就介紹到這了,更多相關Java Scanner用法內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/gongxifacai_believe/article/details/54933287

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 国产精品久久久久久久久久久久久久久久 | 毛片一级网站 | 国产欧美亚洲精品a | 久久久久一区二区三区四区五区 | 久久蜜桃精品一区二区三区综合网 | 免费久久久久久 | av免费在线免费观看 | 欧美日韩专区国产精品 | 国产精品亚洲综合 | 欧美黄色性视频 | 毛片在线免费视频 | 操网 | 精国品产一区二区三区有限公司 | 在线成人免费观看www | 国产99精品在线 | 日产精品一区二区三区在线观看 | 亚洲欧洲日韩av | 一区二区三区无码高清视频 | 亚洲片在线| 日韩在线视频观看免费 | 亚洲国产超高清a毛毛片 | 欧美一级黄视频 | 91精品最新国内在线播放 | 国产精品视频2021 | 万圣街在线观看免费完整版 | 久久久综合久久久 | 草草在线视频 | asian gaysex| 欧美成人国产va精品日本一级 | av在线看网站 | 久久一区二区三区av | 综合网天天色 | 黄视频免费在线 | 亚洲福利在线免费观看 | 久久久线视频 | 国产88久久久国产精品免费二区 | 操碰97| 91网视频 | 一区二区三区国产在线 | 国产污污视频 | 日韩大片在线永久观看视频网站免费 |