[轉載] Java中Scanner用法總結

參考鏈接: Java之Scanner類

最近在做OJ類問題的時候,經常由于Scanner的使用造成一些細節問題導致程序不通過(最慘的就是網易筆試,由于sc死循環了也沒發現,導致AC代碼也不能通過。。。),因此對Scanner進行了一些總結整理。(我的github:https://github.com/MonkeyJJC?tab=repositories)?

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

關于nextInt()、next()和nextLine()的理解?

nextInt(): it only reads the int value, nextInt() places the cursor(光標) in the same line after reading the input.(nextInt()只讀取數值,剩下"\n"還沒有讀取,并將cursor放在本行中)?

next(): read the input only till the space. It can’t read two words separated by space. Also, next() places the cursor in the same line after reading the input.(next()只讀空格之前的數據,并且cursor指向本行) next() 方法遇見第一個有效字符(非空格,非換行符)時,開始掃描,當遇見第一個分隔符或結束符(空格或換行符)時,結束掃描,獲取掃描到的內容,即獲得第一個掃描到的不含空格、換行符的單個字符串。?

nextLine(): reads input including space between the words (that is, it reads till the end of line \n). Once the input is read, nextLine() positions the cursor in the next line. nextLine()時,則可以掃描到一行內容并作為一個字符串而被獲取到。?

public class NextTest{??

? ? public static void main(String[] args) {??

? ? ? ? String s1,s2;??

? ? ? ? Scanner sc=new Scanner(System.in);??

? ? ? ? System.out.print("請輸入第一個字符串:");??

? ? ? ? s1=sc.nextLine();??

? ? ? ? System.out.print("請輸入第二個字符串:");??

? ? ? ? s2=sc.next();??

? ? ? ? System.out.println("輸入的字符串是:"+s1+" "+s2);??

? ? }??

}??

?

結果:?

請輸入第一個字符串:home

請輸入第二個字符串:work

輸入的字符串是:home work

?

把上面的程序修改一下:?

s1=sc.next();??

s2=sc.nextLine();??

?

運行結果:?

請輸入第一個字符串:home

請輸入第二個字符串:輸入的字符串是:home

?

?

可以看到,nextLine()自動讀取了被next()去掉的Enter作為他的結束符,所以沒辦法給s2從鍵盤輸入值。經過驗證,我發現其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等與nextLine()連用時都存在這個問題,解決的辦法是:在每一個 next()、nextDouble() 、 nextFloat()、nextInt() 等語句之后加一個nextLine()語句,將被next()去掉的Enter結束符過濾掉。?

public class NextTest{??

? ? public static void main(String[] args) {??

? ? ? ? String s1,s2;??

? ? ? ? Scanner sc=new Scanner(System.in);??

? ? ? ? System.out.print("請輸入第一個字符串:");??

? ? ? ? s1=sc.next();??

? ? ? ? sc.nextLine();

? ? ? ? System.out.print("請輸入第二個字符串:");??

? ? ? ? s2=sc.nextLine();??

? ? ? ? System.out.println("輸入的字符串是:"+s1+" "+s2);??

? ? }??

}??

?

運行結果:?

請輸入第一個字符串:home

請輸入第二個字符串:work

輸入的字符串是:home work

?

循環輸入多組測試用例?

一個while就是一個測試用例?

? ? public static void main(String[] args){

? ? ? ? Scanner in = new Scanner(System.in);

?

? ? ? ? // 一個while就是一個測試用例

? ? ? ? while(in.hasNext()){

? ? ? ? ? ? int n = in.nextInt(); // 該測試用例后續接收的參數個數

? ? ? ? ? ? long[] array = new long[n];

? ? ? ? ? ? String[] arrayStr = new String[n];

? ? ? ? ? ? for(int i=0; i<n; i++){

? ? ? ? ? ? ? ? arrayStr[i] = in.next();

? ? ? ? ? ? }

? ? ? ? ? ? for(int i=0; i<n; i++){

? ? ? ? ? ? ? ? array[i] = in.nextLong();// 取下一個元素轉換成long類型

? ? ? ? ? ? }

?

? ? ? ? ? ? System.out.println(Arrays.toString(array)+" "+ Arrays.toString(arrayStr));

? ? ? ? }

? ? }

?

一個與容器結合的綜合例子:?

import java.util.Scanner;? ??

public class Main {? ??

? ? public static void main(String[] args) {? ??

? ? ? ? Scanner in = new Scanner(System.in);? ??

? ? ? ? while (in.hasNext()) {? ??

? ? ? ? ? ? int n = in.nextInt();? ?

? ? ? ? /* nextLine()是掃描器執行當前行,并返回跳過的輸入信息,特別需要注意!!!?

?

? ? ? ? ? ? 如果沒有該行,則執行第一個in.nextLine()命令時的返回值是int n = in.nextInt()的值*/? ?

? ? ? ? ? ? in.nextLine();??

? ? ? ? HashSet<String> set = new HashSet<String>();??

? ? ? ? for (int i = 0; i < n; i++) {? ?

? ? ? ? String line =? ?

??

? ? ? ? in.nextLine();? ?

? ? ? ? String[] arr = line.split(" ");? ?

? ? ? ? for (int j = 0; j < arr.length; j++) {? ?

? ? ? ? ? ? set.add(arr[j]);? ?

? ? ? ? }??

? ? ? ? ?}??

? ? ? ? System.out.println("sum:" + set.size());? ??

? ??

? ? }? ??

}??

?

輸入: 3 a b c d e f a b c 輸出: 6

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540236.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540236.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540236.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

os和shutil模塊

import os //os模塊基本實現了linux系統中所有的命令 os.system(終端命令)&#xff1a;在終端執行命令 os.getcwd():獲取當前的工作路徑 os.chdir():修改工作路徑 os.chmod():修改權限 os.chown():修改屬主屬組 os.mkdir():創建單個目錄&#xff0c;當目錄存在時報異常&…

[轉載] JAVA語言程序設計(基礎篇)第十版課后題答案(第一章)

參考鏈接&#xff1a; Java中的Scanner和nextChar() JAVA語言程序設計&#xff08;基礎篇&#xff09;第十版課后題答案 第一章 第二題 /** Created by ysy on 2018/7/6. */ public class text2 { public static void main(String[] args){ for(int i 0; i < 5; i) Syste…

java.util.Date和java.sql.Date 一點區別

最近無意中發現&#xff0c;在oracle中同一樣的一個Date類型字段&#xff0c;存儲的日期格式有兩種不同的情況&#xff0c;第一種是2011-1-1 12:00:00&#xff0c;第二種是2011-1-1&#xff0c;仔細查找發現在向數據庫中寫數據的時候定義的變量的問題。 第一種是&#xff1a;ja…

[轉載] java中關于用\t格式輸出

參考鏈接&#xff1a; 用Java格式化輸出 看了好多人關于\t的用法&#xff0c;感覺找不到自己想要的答案&#xff0c;所以索性就自己輸出來看看&#xff0c;如圖&#xff1a;這樣可以一目了然的看出來&#xff0c;\t&#xff08;制表符&#xff09;的作用就是看前面輸出滿不滿8…

微信搶房軟件開發

2019獨角獸企業重金招聘Python工程師標準>>> 這兩年樓市真可謂是一個"火“字難以形容 經歷了長沙兩次開盤&#xff0c;都沒有搶到&#xff0c;目前還沒有買到房子&#xff0c;說說我的悲劇吧&#xff0c;讓大伙都開心開心 第一次搶房是今年4月份長沙萬科金域國…

[轉載] Java——數組習題

參考鏈接&#xff1a; Java從控制臺讀取輸入的方法 package chap02; import java.util.Scanner; /** * * author admin * date 2020-4-8 * description: * 題目內容&#xff1a; 編寫程序&#xff0c; 從控制臺讀取下面的信息&#xff0c; 每月按22天工作日計算&#xff0c;…

超全Linux備份工具集合,滿足你的所有需要!

經常備份計算機上的數據是個好的做法&#xff0c;它可以手動完成&#xff0c;也可以設置成自動執行。許多備份工具擁有不同的功能特性&#xff0c;讓用戶可以配置備份類型、備份時間、備份對象、將備份活動記入日志及執行更多操作。 1.Rsync這是一款在Linux用戶當中頗受歡迎的命…

[轉載] Java內存管理-你真的理解Java中的數據類型嗎(十)

參考鏈接&#xff1a; Java中的字符串類String 1 做一個積極的人 編碼、改bug、提升自己 我有一個樂園&#xff0c;面向編程&#xff0c;春暖花開&#xff01; 推薦閱讀 第一季 0、Java的線程安全、單例模式、JVM內存結構等知識梳理 1、Java內存管理-程序運行過程&#x…

Linux系統安全加固腳本

閑來無事&#xff0c;整理一個系統安全加固腳本&#xff0c;每個公司的要求不一樣&#xff0c;所以僅供參考&#xff1a; #!/bin/sh echo "00 */1 * * * /usr/sbin/ntpdate 192.168.1.1 >>/var/log/ntpdate.log" > mycrontab crontab mycrontab rm -rf my…

[轉載] 整理下java中stringBuilder和stringBuffer兩個類的區別

參考鏈接&#xff1a; Java中的StringBuffer類 StringBuilder和StringBuffer這兩個類在動態拼接字符串時常用&#xff0c;肯定比String的效率和開銷小&#xff0c;這是因為String的對象不會回收哦。 其實我一直用StringBuilder這個類&#xff0c;因為可以簡寫為sb的變量在程序…

11.13 模10計數器設計

.新建一個工程 Family&#xff1a;FLEX10K Available device&#xff1a;EPF10K20TC144-3 2.設置lpm_counter宏單元參數并連接引腳 連接引腳的時候要注意的是&#xff0c;向量線的連接。 3.時序仿真 檢查無誤后進行下一步 4.載入7448并進行引腳連接 5.分配管腳 再次編譯&#x…

[轉載] java對象在內存中的結構

參考鏈接&#xff1a; 了解Java中的類和對象 今天看到一個不錯的PPT&#xff1a;Build Memory-efficient Java Applications&#xff0c;開篇便提出了一個問題&#xff0c;在Hotspot JVM中&#xff0c;32位機器下&#xff0c;Integer對象的大小是int的幾倍&#xff1f; 我們…

使用valueOf前必須進行校驗

每個枚舉都是java.lang.Enum的子類,都可以訪問Enum類提供的方法,比如hashCode(),name(),valueOf()等..... 其中valueOf()方法會把一個String類型的名稱轉變為枚舉項,也就是枚舉項中查找出字面值與該參數相等的枚舉項,雖然這個方法很簡單,但是JDK卻做了一個對于開發人員來說并不…

[轉載] 【Java】Java基礎知識及其擴展筆記(8千字)

參考鏈接&#xff1a; Java中的StringBuilder類及其示例 Java基礎知識及其擴展筆記 零 l 寫在前面一 l JVM1、【1.1.2.1】java程序運行的一般流程2、【1.1.2.1】JVM一般運行流程3、【1.1.2.1】JIT&#xff08;just in time 即時編譯編譯器&#xff09;4、堆與棧 二 l Java …

多IDC GSLB的部署

之前已經介紹過GSLB的實現原理&#xff0c;這里再向大家講述一下GSLB經常遇到的部署方式&#xff0c;多IDC的部署。很多大型的企業或業務容災要求非常高的客戶都會部署有多個異地的數據中心&#xff0c;以保證其業務的“全天候”不間斷的正常運行&#xff0c;而要整合多個IDC的…

[轉載] Controller報錯:java.lang.NoSuchMethodException: java.util.List.<init>()

參考鏈接&#xff1a; Java8中的java.util.StringJoiner 報錯詳情&#xff1a; java.lang.NoSuchMethodException: java.util.List.<init>() 以及 No primary or default constructor found for interface java.util.List 示例&#xff1a; /** * 此接口會產生以…

[轉載] 算法競賽中的JAVA使用筆記

參考鏈接&#xff1a; Java中StringTokenizer類的示例| 1(構造函數) 算法競賽中的JAVA使用筆記 算法競賽中的JAVA使用筆記 輸入與輸出 基本輸入輸入掛輸出控制臺輸入輸出重定向到文件 大整數與高精度 大整數BigInteger高精度BigDecimal高精度開方 字符串與進制轉換 字符串基本…

信息系統開發平臺OpenExpressApp:【OpenTest】 之 語法及其使用介紹

在OpenTest 之 運行環境準備中介紹了運行自動化測試需要做的一些準備工作&#xff0c;本篇將繼續給大家介紹OpenTest的腳本語法以及使用方法&#xff0c;通過學習后讀者應該能夠開始動手編寫UI自動化測試腳本了。 關鍵字驅動測試 在學習語法之前&#xff0c;需要了解一下關鍵字…

[轉載] java常量池-字符串常量池、class常量池和運行時常量池

參考鏈接&#xff1a; 如何在Java中初始化和比較字符串 原文鏈接&#xff1a;http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/ 在java的內存分配中&#xff0c;經常聽到很多關于常量池的描述&#xff0c;我開始看的時候也是看的很模糊&#xff0c…

Oracle 10g 高級安裝圖文教程(二)

第八步&#xff1a;為了簡便起見&#xff08;工作中肯定不安全&#xff09;&#xff0c;選擇“所有的帳戶都是用同一個口令”&#xff0c;并輸入口令&#xff0c;點擊“下一步”&#xff1a;本文轉自 victoryan 51CTO博客&#xff0c;原文鏈接:http://blog.51cto.com/victoryan…