第三次学JAVA再学不好就吃翔(part46)--Scanner类
學(xué)習(xí)筆記,僅供參考
文章目錄
- Scanner類
- Scanner獲取數(shù)據(jù)出現(xiàn)的問題
Scanner類
- 概述
Scanner是在java.util包下的一個類,使用該類時我們需要導(dǎo)包。這個類被final修飾,也就是說,它是最終類,不能被繼承。它是一個可以使用正則表達(dá)式來解析基本類型和字符串的簡單文本掃描器。
- 舉個例子
輸出:
請輸入一個整數(shù): 10 x = 10如果這時,我們輸入字符a,則會報錯:
請輸入一個整數(shù): a Exception in thread "main" java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Unknown Source)at java.util.Scanner.next(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at com.guiyang.restudy3.D1Scanner.main(D1Scanner.java:10)如果我希望錄入的只有int類型的數(shù)值,那么我們該怎么辦呢?
這時,我們可以使用hasNextInt()方法, 該方法會判斷鍵盤錄入的數(shù)值是否為int類型,如果是則返回true,不是則返回false
下面我們應(yīng)用該方法:
package com.guiyang.object;import java.util.Scanner;public class Demo1_Scanner {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入一個整數(shù):");if (scanner.hasNextInt()) {int x = scanner.nextInt();System.out.println("x = " + x);} else {System.out.println("輸入錯誤.");}}}輸出:
請輸入一個整數(shù): a 輸入錯誤.- 一般方法
- hasNextXxx():可以判斷是否還有下一個輸入項,其中Xxx可以是Int,Double等類型,如果需要判斷下一個輸入項是否為字符串,Xxx可以省略;
- nextXxx():可以獲取下一個輸入項,其中Xxx和hasNextXxx()中的Xxx意義相同,默認(rèn)情況下,Scanner使用空格和回車作為分隔符。
Scanner獲取數(shù)據(jù)出現(xiàn)的問題
- 常用的兩個方法
- nextInt():獲取一個int類型的值
- nextLine():獲取一個String類型的值
- 舉個例子1
獲取分別多個int值和多個String值。
獲取多個int值:
package com.guiyang.restudy3;import java.util.Scanner;public class D1Scanner {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入第1個整數(shù):");int x1 = scanner.nextInt();System.out.println("x1 = " + x1);System.out.println("請輸入第2個整數(shù):");int x2 = scanner.nextInt();System.out.println("x2 = " + x2);}}輸出:
請輸入第1個整數(shù): 10 x1 = 10 請輸入第2個整數(shù): 20 x2 = 20獲取多個字符串:
package com.guiyang.restudy3;import java.util.Scanner;public class D1Scanner {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入第1個字符串:");String x1 = scanner.nextLine();System.out.println("請輸入第2個字符串:");String x2 = scanner.nextLine();System.out.println("x1 = " + x1 + ", x2 = " + x2);} }輸出:
請輸入第1個字符串: Huang 請輸入第2個字符串: 9 x1 = Huang, x2 = 9- 舉個例子2(nextInt()和nextLine()一起用時出現(xiàn)的小問題)
我們知道nextInt()是錄入整數(shù)的方法,當(dāng)我們錄入一個整數(shù)(比如10)再敲回車的時候,其實在鍵盤上錄入的是10\r\n,而nextInt()方法只獲取到10就結(jié)束了,如果此時我們立馬用nextLine()方法獲取字符串,那么nextLine()方法就會遇到nextInt()方法未獲取的\r\n,nextLine()方法只要一遇到\r\n就會結(jié)束方法,不再獲取。
我們看下面一段代碼,驗證我們剛剛說的段話:
package com.guiyang.restudy3;import java.util.Scanner;public class D1Scanner {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入第1個整數(shù):");int x1 = scanner.nextInt();System.out.println("請輸入第2個字符串:");String x2 = scanner.nextLine();System.out.println("x1 = " + x1 + ", x2 = " + x2);} }輸出:
請輸入第1個整數(shù): 10 請輸入第2個字符串: x1 = 10, x2 =當(dāng)我們錄入10再敲回車后,JAVA沒有給我們輸入字符串的機(jī)會,直接結(jié)束。
那么對于這種問題有沒有什么解決辦法呢?
解決方案1:創(chuàng)建兩個鍵盤錄入對象即可:
package com.guiyang.restudy3;import java.util.Scanner;public class D1Scanner {public static void main(String[] args) {Scanner scanner1 = new Scanner(System.in);System.out.println("請輸入第1個整數(shù):");int x1 = scanner1.nextInt();Scanner scanner2 = new Scanner(System.in);System.out.println("請輸入第2個字符串:");String x2 = scanner2.nextLine();System.out.println("x1 = " + x1 + ", x2 = " + x2);} }輸出:
請輸入第1個整數(shù): 10 請輸入第2個字符串: Huang x1 = 10, x2 = Huang雖然這樣解決了我們的燃眉之急,但是創(chuàng)建2個對象會浪費(fèi)內(nèi)存空間,所以不支持。
解決方案2:2次都錄入字符串,都用nextLine()方法,再將整數(shù)字符串轉(zhuǎn)換為整數(shù)。這里我們就不做演示了,等學(xué)到相關(guān)方法時,回頭解決這個問題。
總結(jié)
以上是生活随笔為你收集整理的第三次学JAVA再学不好就吃翔(part46)--Scanner类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库update用法详解
- 下一篇: 手机无面容是什么意思(手机手机报价)