欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Scanner用法案例詳解

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

一、Scanner類簡介

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

二、Scanner類用法

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

      Scanner reader=new Scanner(System.in); 

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

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

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

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

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

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

三、Scanner類實例

(1)

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

      運行結(jié)果:

      C:\java>java     

      請輸入若干個數(shù),每輸入一個數(shù)用回車確認

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

      34.13445

      3個數(shù)的和為113.100000

      3個數(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+" ,入司時間:"+ 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]);
}
}

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

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

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

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

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

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

      運行結(jié)果:

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

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


asdfkl 

las 

四、Scanner報錯:java.util.NoSuchElementException

【問題描述】代碼如下:

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

【報錯原因】在第二次使用Scanner之前調(diào)用了close方法。而在關(guān)閉的時候,會把System.in也關(guān)閉了。當下次new一個讀取的時候,因為輸入流已經(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;
        }

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

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

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

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

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

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

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

相關(guān)文章

  • Java中常用阻塞隊列的問題小結(jié)

    Java中常用阻塞隊列的問題小結(jié)

    這篇文章主要介紹了Java常用阻塞隊列問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • Java多線程并發(fā)與并行和線程與進程案例

    Java多線程并發(fā)與并行和線程與進程案例

    這篇文章主要介紹了Java多線程并發(fā)與并行和線程與進程案例,文章基于Java的相關(guān)資料展開詳細的內(nèi)容介紹,具有一定的參考價價值,需要的小伙伴可以參考一下
    2022-06-06
  • MyBatis詳解如何實現(xiàn)Dao層接口

    MyBatis詳解如何實現(xiàn)Dao層接口

    MyBatis允許只聲明一個dao接口,而無需寫dao實現(xiàn)類的方式實現(xiàn)數(shù)據(jù)庫操作。前提是必須保證Mapper文件中的<mapper>標簽的namespace屬性值必須要和dao接口的類路徑一致,MyBatis容器會自動通過動態(tài)代理生成接口的實現(xiàn)類
    2022-04-04
  • Java中Quartz高可用定時任務(wù)快速入門

    Java中Quartz高可用定時任務(wù)快速入門

    如果你想做定時任務(wù),有高可用方面的需求,或者僅僅想入門快,上手簡單,那么選用它準沒錯,感興趣的小伙伴們可以參考一下
    2022-04-04
  • java HashMap 的工作原理詳解

    java HashMap 的工作原理詳解

    本文主要介紹java HashMap 的資料,這里整理了相關(guān)資料,并詳細說明了HashMap的用法,有需要的小伙伴可以參考下
    2016-09-09
  • Java Web導出等比例圖片到Excel的實現(xiàn)過程

    Java Web導出等比例圖片到Excel的實現(xiàn)過程

    我們使用Java導出圖片到Excel,打開成功導出的Excel一看,商品對應(yīng)的圖片都很規(guī)矩的按照我的設(shè)置鋪滿了整個單元格,但是,商品圖片卻都變形了,這樣肯定是不行的,于是第一反應(yīng)就是將圖片等比例導出,所以本文本給大家介紹了如何使用Java Web導出等比例圖片到Excel
    2023-11-11
  • Spring?boot數(shù)據(jù)庫依賴詳解

    Spring?boot數(shù)據(jù)庫依賴詳解

    這篇文章主要介紹了Spring?boot數(shù)據(jù)庫依賴,需要的朋友可以參考下
    2023-09-09
  • 2020.2 IntelliJ IDEA激活與IDEA2020.2破解詳細教程

    2020.2 IntelliJ IDEA激活與IDEA2020.2破解詳細教程

    這篇文章主要介紹了2020.2 IntelliJ IDEA激活與IDEA2020.2破解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Spring實戰(zhàn)之設(shè)置普通屬性值的方法示例

    Spring實戰(zhàn)之設(shè)置普通屬性值的方法示例

    這篇文章主要介紹了Spring實戰(zhàn)之設(shè)置普通屬性值的方法,結(jié)合實例形式分析了Spring設(shè)置普通屬性值的方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-11-11
  • Unicode、UTF-8 和 ISO8859-1區(qū)別解析

    Unicode、UTF-8 和 ISO8859-1區(qū)別解析

    這篇文章主要介紹了Unicode、UTF-8 和 ISO8859-1到底有什么區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01

最新評論