最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Scanner用法案例詳解

 更新時(shí)間:2021年08月31日 14:30:35   作者:魏曉蕾  
這篇文章主要介紹了Java Scanner用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

一、Scanner類(lèi)簡(jiǎn)介

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

二、Scanner類(lèi)用法

      Scanner是SDK1.5新增的一個(gè)類(lèi),可使用該類(lèi)創(chuàng)建一個(gè)對(duì)象。

      Scanner reader=new Scanner(System.in); 

      然后reader對(duì)象調(diào)用下列方法(函數(shù)),讀取用戶在命令行輸入的各種數(shù)據(jù)類(lèi)型  

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

     上述方法執(zhí)行時(shí)都會(huì)造成堵塞,等待用戶在命令行輸入數(shù)據(jù)回車(chē)確認(rèn).例如,擁護(hù)在鍵盤(pán)輸入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false。NextLine()等待用戶輸入一個(gè)文本行并且回車(chē),該方法得到一個(gè)String類(lèi)型的數(shù)據(jù)。

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

      下面是一些API函數(shù)的用法:

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

三、Scanner類(lèi)實(shí)例

(1)

import java.util.*;
public class Example
{
public static void main(String args[])
{
System.out.println("請(qǐng)輸入若干個(gè)數(shù),每輸入一個(gè)數(shù)用回車(chē)確認(rèn)");
System.out.println("最后輸入一個(gè)非數(shù)字結(jié)束輸入操作");
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個(gè)數(shù)的和為%f\n",m,sum);
System.out.printf("%d個(gè)數(shù)的平均值是%f\n",m,sum/m);
}
}

      運(yùn)行結(jié)果:

      C:\java>java     

      請(qǐng)輸入若干個(gè)數(shù),每輸入一個(gè)數(shù)用回車(chē)確認(rèn)

      最后輸入一個(gè)非數(shù)字結(jié)束輸入操作

      34.13445

      3個(gè)數(shù)的和為113.100000

      3個(gè)數(shù)的平均值是37.700000

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

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參數(shù)以讀取不同分隔符分隔的內(nèi)容
    String name = linescanner.next();
    int age = linescanner.nextInt();
    String idate = linescanner.next();
    boolean iscertified = linescanner.nextBoolean();
    System.out.println("姓名:"+name+" ,年齡:"+ age+" ,入司時(shí)間:"+ idate+" ,驗(yàn)證標(biāo)記:"+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]);
}
}

      運(yùn)行結(jié)果:C:\java>java     readhuman hrinfo.txt

      姓名:老趙 ,年齡:28 ,入司時(shí)間:feb-01 ,驗(yàn)證標(biāo)記:true

      姓名:小竹 ,年齡:22 ,入司時(shí)間:dec-03 ,驗(yàn)證標(biāo)記:false

      姓名:阿波 ,年齡:21 ,入司時(shí)間:dec-03 ,驗(yàn)證標(biāo)記:false

      姓名:凱子,年齡:25 ,入司時(shí)間:dec-03 ,驗(yàn)證標(biāo)記:true

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

使用默認(rèn)的空格分隔符:

        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()); 
                } 
        }

      運(yùn)行結(jié)果:

123 
asdf 
sd 
45 
789 
sdf 
asdfl,sdf.sdfl,asdf 
......asdfkl 
las 

--將注釋行去掉,使用空格或逗號(hào)或點(diǎn)號(hào)作為分隔符,輸出結(jié)果如下:
123 
asdf 
sd 
45 
789 
sdf 
asdfl 
sdf 
sdfl 
asdf 


asdfkl 

las 

四、Scanner報(bào)錯(cuò):java.util.NoSuchElementException

【問(wèn)題描述】代碼如下:

String str1 = input1.nextLine();
input1.close();
Scanner input2 = new Scanner(System.in);
String str2 = input2.nextLine();
input2.close();

【報(bào)錯(cuò)原因】在第二次使用Scanner之前調(diào)用了close方法。而在關(guān)閉的時(shí)候,會(huì)把System.in也關(guān)閉了。當(dāng)下次new一個(gè)讀取的時(shí)候,因?yàn)檩斎肓饕呀?jīng)關(guān)閉,所以讀取的值就是-1;在Scanner 的readinput方法里面有以下代碼。

try {
            n = source.read(buf);
        } catch (IOException ioe) {
            lastException = ioe;
            n = -1;
        }
 
        if (n == -1) {
            sourceClosed = true;
            needInput = false;
        }

      因?yàn)樽x到了-1就設(shè)置sourceClosed =true;neepinput=false; 在next方法里面有以下代碼:

if (needInput)
    readInput();
else
    throwFor();

      當(dāng)needinput為false,就執(zhí)行throwFor,因此再看throwFor

skipped = false;
if ((sourceClosed) && (position == buf.limit()))
    throw new NoSuchElementException();
else
    throw new InputMismatchException();

      position 是當(dāng)前讀取的內(nèi)容在緩沖區(qū)中位置,因?yàn)樽x取的是-1,因此position =0,而buf.limit()也等于0,因此就執(zhí)行了throw new NoSuchElementException();

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

到此這篇關(guān)于Java Scanner用法案例詳解的文章就介紹到這了,更多相關(guān)Java Scanner用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于jmeter實(shí)現(xiàn)跨線程組傳遞token過(guò)程圖解

    基于jmeter實(shí)現(xiàn)跨線程組傳遞token過(guò)程圖解

    這篇文章主要介紹了基于jmeter實(shí)現(xiàn)跨線程組傳遞token,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java中繼承測(cè)試代碼分析

    java中繼承測(cè)試代碼分析

    這篇文章主要介紹了java中繼承測(cè)試代碼分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • spring boot整合RabbitMQ(Direct模式)

    spring boot整合RabbitMQ(Direct模式)

    springboot集成RabbitMQ非常簡(jiǎn)單,如果只是簡(jiǎn)單的使用配置非常少,springboot提供了spring-boot-starter-amqp項(xiàng)目對(duì)消息各種支持。下面通過(guò)本文給大家介紹下spring boot整合RabbitMQ(Direct模式),需要的朋友可以參考下
    2017-04-04
  • java實(shí)現(xiàn)猜數(shù)字游戲

    java實(shí)現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • java使用UDP實(shí)現(xiàn)多人聊天功能

    java使用UDP實(shí)現(xiàn)多人聊天功能

    這篇文章主要為大家詳細(xì)介紹了java使用UDP實(shí)現(xiàn)多人聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Tree組件實(shí)現(xiàn)支持50W數(shù)據(jù)方法剖析

    Tree組件實(shí)現(xiàn)支持50W數(shù)據(jù)方法剖析

    這篇文章主要為大家介紹了Tree組件實(shí)現(xiàn)支持50W數(shù)據(jù)的方法剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 如何使用JavaMail發(fā)送郵件

    如何使用JavaMail發(fā)送郵件

    這篇文章主要教大家如何使用JavaMail發(fā)送郵件在web應(yīng)用中,實(shí)現(xiàn)用戶注冊(cè)成功之后,將用戶的注冊(cè)信息以Email的形式發(fā)送到用戶的注冊(cè)郵箱當(dāng)中,感興趣的小伙伴們可以參考一下
    2015-12-12
  • JAVA異常處理機(jī)制之throws/throw使用情況

    JAVA異常處理機(jī)制之throws/throw使用情況

    這篇文章主要介紹了JAVA異常處理機(jī)制之throws/throw使用情況的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 解決@MapperScan和@Mapper共存之坑X(jué)xxMapper?that?could?not?be?found.

    解決@MapperScan和@Mapper共存之坑X(jué)xxMapper?that?could?not?be?fo

    這篇文章主要介紹了解決@MapperScan和@Mapper共存之坑X(jué)xxMapper?that?could?not?be?found問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java中SPI機(jī)制的實(shí)現(xiàn)詳解

    Java中SPI機(jī)制的實(shí)現(xiàn)詳解

    SPI(Service?Provider?Interface),是?JDK?內(nèi)置的一種服務(wù)提供發(fā)現(xiàn)機(jī)制,可以用來(lái)啟用框架擴(kuò)展和替換組件,下面我們就來(lái)看看Java中SPI機(jī)制的具體實(shí)現(xiàn)
    2024-01-01

最新評(píng)論

彭州市| 綦江县| 武汉市| 军事| 青冈县| 怀来县| 青浦区| 广德县| 白城市| 金华市| 尚志市| 九台市| 方城县| 水城县| 玛沁县| 昆明市| 双桥区| 宁阳县| 穆棱市| 宜州市| 肇庆市| 淅川县| 邻水| 清苑县| 广东省| 即墨市| 鄂温| 泸州市| 丹巴县| 灵宝市| 额济纳旗| 弥渡县| 平乡县| 阳朔县| 伊宁县| 右玉县| 高碑店市| 桐柏县| 博野县| 乌兰县| 民丰县|