Java Scanner的使用和hasNextXXX()的用法說(shuō)明
輸入輸出
輸出
基本語(yǔ)法
System.out.println(msg); //輸出一個(gè)字符串,自帶換行 System.out.print(msg); //輸出一個(gè)字符串,不帶換行 System.out.printf(msg); //格式化輸出,和C語(yǔ)言相同
例如:
public class SannerDemo {
public static void main(String[] args) {
System.out.println("hello world!");
System.out.print("hello world!");
String str = "hello world";
System.out.printf("%s\n",str);
}
}

快捷鍵推薦:在這里,如果使用的是 IDEA的話,可以輸入sout然后回車(chē),會(huì)自動(dòng)輸出 System.out.println();
輸入
使用Scanner讀取
首先需要導(dǎo)入==import java.util.Scanner;==的包,然后 Scanner sc =new Scanner(System.in);,這段代碼的主要作用是,從鍵盤(pán)中輸入中讀取數(shù)據(jù)。
然后讀取數(shù)據(jù):
next()、nextInt()和nextLIne()的區(qū)別;
import java.util.Scanner;
public class SannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
System.out.println(i); //讀取int型的數(shù)據(jù)
//讀取一行數(shù)據(jù)
String s1 = sc.nextLine();
System.out.println(s1);
//讀取字符串
String s2 = sc.next();
System.out.println(s2);
}
nextInt():
int i = sc.nextInt();
System.out.println(i); //讀取int型的數(shù)據(jù)


可以讀取數(shù)字,但是遇到空格,只能讀取空格前的數(shù)字。
next():
// //讀取字符串
String s2 = sc.next();
System.out.println(s2);

可以讀取字符串,但是遇到空格,只能讀取空格前的數(shù)字。
nextLine():
//讀取一行數(shù)據(jù)
String s1 = sc.nextLine();
System.out.println(s1);

可以讀取字符串,并讀取這一行 ,但是遇到回車(chē)結(jié)束。
注意:
next()和nextLine()不可以同時(shí)使用:
例如:
//讀取字符串
String s2 = sc.next();
System.out.println(s2);
//讀取一行數(shù)據(jù)
String s1 = sc.nextLine();
System.out.println(s1);

這樣只會(huì)輸出一行,這是因?yàn)閚extLine()讀取了回車(chē),然后結(jié)束。
next()遇到空客會(huì)結(jié)束。

使用Scanner循環(huán)讀取N個(gè)數(shù)字/字符串
hasNextInt()的使用
import java.util.Scanner;
public class SannerDemo {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while (sc.hasNextInt()){
int i = sc.nextInt();//輸入數(shù)字i
System.out.println(i);//打印數(shù)字i
}
}

當(dāng)程序開(kāi)始之后,會(huì)一直循環(huán)輸入并打印一個(gè)數(shù)字,知道Ctrl+d結(jié)束程序
在這里sc.hasNextInt()的結(jié)果是一個(gè)boolean的類型,當(dāng)結(jié)果為false是結(jié)束。
注意:
Ctrl+d用來(lái)結(jié)束循環(huán)輸入多個(gè)數(shù)據(jù)
同理:

這些方法都可以用于循環(huán)數(shù)據(jù)輸入。
關(guān)于Scanner中nextxxx()須注意的一點(diǎn)
public static void main(String[] args) {
// TODO code application logic here
Scanner s = new Scanner(System.in);
//需要注意的是,如果在通過(guò)nextInt()讀取了整數(shù)后,再接著讀取字符串,讀出來(lái)的是回車(chē)換行:"\r\n",因?yàn)閚extInt僅僅讀取數(shù)字信息,而不會(huì)讀走回車(chē)換行"\r\n".
//所以,如果在業(yè)務(wù)上需要讀取了整數(shù)后,接著讀取字符串,那么就應(yīng)該連續(xù)執(zhí)行兩次nextLine(),第一次是取走整數(shù),第二次才是讀取真正的字符串
int i = s.nextInt();
System.out.println("讀取的整數(shù)是"+ i);
String rn = s.nextLine();//讀取到的是空格
String a = s.nextLine();//讀取到的是字符串
System.out.println("讀取的字符串是:"+a);
}
PS:nextDouble,nextFloat與nextInt是一樣的
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)設(shè)計(jì)模式之責(zé)任鏈模式
責(zé)任鏈模式是一種行為設(shè)計(jì)模式,允許你將請(qǐng)求沿著處理鏈發(fā)送,然后處理者都可對(duì)其進(jìn)行處理,完成后可以再將其傳遞給下一個(gè)處理者。下面將會(huì)舉例說(shuō)明什么是責(zé)任鏈模式,責(zé)任鏈模式該如何使用2022-08-08
Spring?Data?JPA實(shí)現(xiàn)審計(jì)功能過(guò)程詳解
Spring?Data?JPA為跟蹤持久性層的變化提供了很好的支持。通過(guò)使用審核,我們可以存儲(chǔ)或記錄有關(guān)實(shí)體更改的信息,例如誰(shuí)創(chuàng)建或更改了實(shí)體以及何時(shí)進(jìn)行更改2023-02-02
SpringBoot actuator 健康檢查不通過(guò)的解決方案
這篇文章主要介紹了SpringBoot actuator 健康檢查不通過(guò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java分布式ID中Snowflake雪花算法應(yīng)用實(shí)現(xiàn)
Snowflake算法作為一種高效且易于實(shí)現(xiàn)的分布式ID生成方案,能夠很好地滿足分布式系統(tǒng)中對(duì)全局唯一ID的需求,本文就來(lái)介紹一下Java分布式ID中Snowflake雪花算法應(yīng)用實(shí)現(xiàn),感興趣的可以了解一下2024-07-07
MyBatis-Plus聯(lián)表查詢及分頁(yè)代碼舉例
本文介紹了mybatis-plus-join工具的使用,該工具可以簡(jiǎn)化mybatis-plus的聯(lián)表查詢,使得開(kāi)發(fā)者可以以類似QueryWrapper的方式進(jìn)行聯(lián)表查詢,無(wú)需手動(dòng)編寫(xiě)xml文件,感興趣的朋友跟隨小編一起看看吧2025-03-03
Maven多模塊及version修改的實(shí)現(xiàn)方法
這篇文章主要介紹了Maven多模塊及version修改的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
JAVA實(shí)現(xiàn)sm3加密簽名以及防止重復(fù)攻擊
這篇文章主要給大家介紹了關(guān)于JAVA實(shí)現(xiàn)sm3加密簽名以及防止重復(fù)攻擊的相關(guān)資料,SM3是簽名算法,和MD5一樣(對(duì)于應(yīng)用層來(lái)說(shuō)),SM4是對(duì)稱加密算法,和AES一樣(對(duì)于應(yīng)用層來(lái)說(shuō)),需要的朋友可以參考下2023-10-10
Java 基礎(chǔ)面試真題:String 為什么是不可變的?
本文主要介紹了String、StringBuffer和StringBuilder的區(qū)別,以及String不可變的原因,String不可變的原因是其內(nèi)部使用final修飾的char數(shù)組保存字符串,同時(shí)String類沒(méi)有提供修改字符串的方法,在Java9之后,String的底層實(shí)現(xiàn)由char[]改成了byte[],這是為了節(jié)省內(nèi)存空間2025-01-01

