java Split 實(shí)現(xiàn)去除一個(gè)空格和多個(gè)空格
用Split函數(shù)可以去除輸入一個(gè)字符串中的空格,并且一般都是將它存儲(chǔ)在一個(gè)字符串?dāng)?shù)組之中
例如:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s=in.nextLine(); //如果我輸入:0 1 2 3 4 String[] str=s.split(" "); System.out.println(s); System.out.println(str[3]); } }
輸出結(jié)果是:
0 1 2 3 4
3
可是會(huì)出現(xiàn)這種情況,如果我輸入的是0 1 2 3 4,在2和3之間有3個(gè)的空格,那還會(huì)有用嗎?
結(jié)果輸出是:
0 1 2 (空格) 3 4
(空格)
也就是沒(méi)有輸出str[3],至少看上去是這樣的,然后我分析得出結(jié)論,其實(shí)是這樣的,
舉個(gè)例子,我輸入2(空)(空)(空)3,執(zhí)行Split函數(shù)后得到的String str數(shù)組
是str[0]=2 ,str[1]=(空),str[2]=(空),str[3]=3
也就是說(shuō),Split函數(shù)在執(zhí)行多空格判斷時(shí),會(huì)只將第一個(gè)空格忽略,其余空格都放入數(shù)組,直到遇到非空格數(shù)3,然后后面的情況重復(fù),只有一個(gè)空格,情況是結(jié)果是理想的,多個(gè)空格,又是重復(fù)如此
解決方法:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s=in.nextLine(); String[] str=s.split("\\s+ "); //改動(dòng)這里 System.out.println(s); System.out.println(str[3]); } }
利用正則表達(dá)式,就可以實(shí)現(xiàn)我們理想的結(jié)果,
例如:輸入2(空)(空)(空)3
結(jié)果:
str[0]=2
str[1]=3
補(bǔ)充知識(shí):Java 鍵盤(pán)輸入數(shù)字(空格隔開(kāi)) 將數(shù)字存入數(shù)組
Scanner方法
核心是單行輸入字符串,切割字符串中的空格,存入數(shù)組
Scanner s = new Scanner(System.in); String inputStr = s.nextLine(); String[] strArray = inputStr.split(" "); int[] num = new int[strArray.length]; for(int i = 0 ; i < num.length ; i++){ num[i] = Integer.parseInt(strArray[i]); }
Scanner輸入的一個(gè)問(wèn)題:在Scanner類(lèi)中如果我們?cè)谌魏?個(gè)nextXXX()方法之后調(diào)用nextLine()方法,這nextLine()方法不能夠從控制臺(tái)讀取任何內(nèi)容,并且,這游標(biāo)不會(huì)進(jìn)入控制臺(tái),它將跳過(guò)這一步。nextXXX()方法包括nextInt(),nextFloat(), nextByte(),nextShort(),nextDouble(),nextLong(),next()。此時(shí)應(yīng)該使用BufferedReader。 ?
BufferedReader方法
首行輸入數(shù)組大小,次行輸入數(shù)組內(nèi)容,依次用空格隔開(kāi)。
它的優(yōu)勢(shì)在于消耗比scanner更少的內(nèi)存和時(shí)間,如果在寫(xiě)算法時(shí)優(yōu)先使用BufferedReader方法。
注意:使用完記得close,Scanner方法不需要close。
public static int[] ListInput() throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = 0; String str = null; N= Integer.parseInt(br.readLine()); str = br.readLine(); br.close(); int[] myList = new int[N]; String[] strArray = str.split(" "); for (int i = 0; i < N; i++) { myList[i] = Integer.parseInt(strArray[i]); } return myList; } ···
以上這篇java Split 實(shí)現(xiàn)去除一個(gè)空格和多個(gè)空格就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Spring多數(shù)據(jù)源TransactionManager沖突的解決方案
這篇文章主要介紹了關(guān)于Spring多數(shù)據(jù)源TransactionManager沖突的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07使用spring-cache一行代碼解決緩存擊穿問(wèn)題
本文主要介紹了使用spring-cache一行代碼解決緩存擊穿問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-0430分鐘入門(mén)Java8之默認(rèn)方法和靜態(tài)接口方法學(xué)習(xí)
這篇文章主要介紹了30分鐘入門(mén)Java8之默認(rèn)方法和靜態(tài)接口方法學(xué)習(xí),詳細(xì)介紹了默認(rèn)方法和接口,有興趣的可以了解一下。2017-04-04Spring?Boot中優(yōu)雅地處理參數(shù)傳遞的技巧分享
最近一直在學(xué)習(xí)Spring Boot,今天將其中的從前臺(tái)過(guò)來(lái)的參數(shù)傳遞總結(jié)一下,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot中優(yōu)雅地處理參數(shù)傳遞的技巧,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05詳解SpringCloud Ribbon 負(fù)載均衡通過(guò)服務(wù)器名無(wú)法連接的神坑
這篇文章主要介紹了詳解SpringCloud Ribbon 負(fù)載均衡通過(guò)服務(wù)器名無(wú)法連接的神坑,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06springboot指定profiles啟動(dòng)失敗問(wèn)題及解決
這篇文章主要介紹了springboot指定profiles啟動(dòng)失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04