您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“JAVA正則表達(dá)式、包裝類、自動(dòng)裝箱/自動(dòng)拆箱及BigDecimal怎么用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
正確的字符串格式規(guī)則。
常用來(lái)判斷用戶輸入的內(nèi)容是否符合格式的要求,注意是嚴(yán)格區(qū)分大小寫的。
Matches(正則) : 當(dāng)前字符串能否匹配正則表達(dá)式
replaceAll(正則,子串) : 替換子串
split(正則) : 拆分字符串
創(chuàng)建包: cn.tedu.api
創(chuàng)建類: TestRegex.java
package cn.tedu.api; import java.util.Scanner; /*本類用于正則表達(dá)式入門案例*/ //需求:接收用戶輸入的身份證號(hào),并將判斷的結(jié)果輸出 public class TestRegex { public static void main(String[] args) { //1.編輯正則表達(dá)式 //身份證號(hào)的規(guī)律:一共是18位,前17位是數(shù)子,第18位有可能是數(shù)字,也有可能是X //String regex = "[0-9]{17}[0-9X]"; /*單個(gè)\在Java中有特殊的含義,表示轉(zhuǎn)義符號(hào),不認(rèn)為是一個(gè)斜杠 * 所以如果想要表示斜杠,需要在它的前面加一個(gè)用來(lái)轉(zhuǎn)義的\ * 也就是\\才表示成一個(gè)單純的斜杠 * \t -- 制表符 \r回車符 \n換行符*/ String regex = "\\d{17}[0-9X]"; //2.定義變量用來(lái)接收用戶輸入的身份證號(hào): String input; //3.判斷用戶輸入的數(shù)據(jù)是否符合正則表達(dá)式,如果不正確,繼續(xù)輸入 do { System.out.println("請(qǐng)輸入您的身份證號(hào):"); input = new Scanner(System.in).nextLine(); if (input.matches(regex)) {//如果身份證號(hào)正確 System.out.println("恭喜你!輸入正確!"); return;//結(jié)束本方法 } } while (!input.matches(regex));//只要不符合正則表達(dá)式,就繼續(xù)輸入 } }
把基本類型進(jìn)行包裝,提供更加完善的功能。
基本類型是沒(méi)有任何功能的,只是一個(gè)變量,記錄值,而包裝類可以有更加豐富的功能
數(shù)字包裝類的抽象父類。
提供了各種獲取值的方式。
方式一: new Integer(5);
方式二: Integer.valueOf(5);
Integer類中包含256個(gè)Integer緩存對(duì)象,范圍是 -128~127
使用valueOf()時(shí),如果指定范圍內(nèi)的值,直接訪問(wèn)緩存對(duì)象不新建;如果指定范圍外的值,直接新建對(duì)象。
常見方法
static int parseInt(String s) 將字符串參數(shù)作為有符號(hào)的十進(jìn)制整數(shù)進(jìn)行解析
創(chuàng)建包: cn.tedu. api
創(chuàng)建類: TestNumber.java
package cn.tedu.api; /*本類用于測(cè)試包裝類*/ public class TestNumber { //1.定義成員變量,注意要設(shè)置成靜態(tài)的,因?yàn)殪o態(tài)只能調(diào)用靜態(tài) static Integer i0; public static void main(String[] args) { //2.打印Integer的默認(rèn)值進(jìn)行測(cè)試 System.out.println(i0);//默認(rèn)值為null //3.創(chuàng)建int類型對(duì)應(yīng)的包裝類Integer類型的對(duì)象--方式一 Integer i1 = new Integer(5); Integer i11 = new Integer(5); System.out.println( i1 == i11 );//false,==對(duì)于引用類型,比較的是地址值 //4.創(chuàng)建int類型對(duì)應(yīng)的包裝類Integer類型的對(duì)象--方式二 /*Integer有一個(gè)高效的效果,數(shù)據(jù)在:(-128~127) * 在此范圍內(nèi),相同的數(shù)據(jù)只會(huì)存一次,后續(xù)再存都是使用之前存過(guò)的數(shù)據(jù)*/ Integer i2 = Integer.valueOf(127); Integer i3 = Integer.valueOf(127); System.out.println(i1 == i2);//false System.out.println(i2 == i3);//true //滿足高效效果的3個(gè)條件:Integer valueOf() -128~127 Integer i4 = Integer.valueOf(300); Integer i5 = Integer.valueOf(300); System.out.println(i4 == i5);//false } }
創(chuàng)建對(duì)象
new Double(3.14)
Double.valueOf(3.14)//和 new 沒(méi)有區(qū)別 常用方法
Double.parseDouble();
創(chuàng)建包: cn.tedu.api
創(chuàng)建類: TestNumber.java
package cn.tedu.api; /*本類用于測(cè)試基本類型的包裝類*/ public class TestNumber { public static void main(String[] args) { //1.創(chuàng)建int包裝類Integer對(duì)象的方式1 Integer i1 = new Integer(100); Integer i11 = new Integer(100); System.out.println(i1 == i11);//false,new了兩次,是兩個(gè)不同的對(duì)象,地址值不同 //2.創(chuàng)建int包裝類Integer對(duì)象的方式2 /*Integer有一個(gè)高效的效果,但是必須滿足3個(gè)條件: * 1.是Integer類型 * 2.使用valueOf()的創(chuàng)建方式 * 3.數(shù)據(jù)在-128~127的范圍內(nèi) * 滿足以上條件,相同的數(shù)據(jù)只會(huì)存一次,后續(xù)再使用都是以前存過(guò)的數(shù)據(jù)*/ Integer i2 = Integer.valueOf(100); Integer i22 = Integer.valueOf(100); System.out.println(i2 == i22);//true Integer i3 = Integer.valueOf(300); Integer i33 = Integer.valueOf(300); System.out.println(i3 == i33);//false 超出高效的數(shù)據(jù)范圍-128~127 //3.創(chuàng)建double包裝類Double對(duì)象的方式1 Double d1 = new Double(3.14); Double d11 = new Double(3.14); System.out.println(d1 == d11);//false,創(chuàng)建兩個(gè)不同的對(duì)象,地址值不同 //4.創(chuàng)建double包裝類Double對(duì)象的方式2 /*只有Integer才有高效的效果Double是沒(méi)有的*/ Double d2 = Double.valueOf(3.14); Double d22 = Double.valueOf(3.14); System.out.println(d1 == d2);//false System.out.println(d2 == d22); //5.測(cè)試常用方法 //這個(gè)方法的作用就是把傳入的String類型的數(shù)據(jù)轉(zhuǎn)成int /*對(duì)象是什么類型的,就可以使用這個(gè)類的所有資源 i1是Integer類型的對(duì)象,所以可以使用parseInt()將String類型的數(shù)據(jù)轉(zhuǎn)為int類型 d1是Double類型的對(duì)象,所以可以使用parseDouble()將String類型的數(shù)據(jù)轉(zhuǎn)為double類型*/ System.out.println(i1.parseInt("800")+8);//808->int+int System.out.println(d1.parseDouble("2.2")+3.1);//5.300000000000001->double+double } }
自動(dòng)裝箱:把 基本類型 包裝成對(duì)應(yīng)的 包裝類型 的過(guò)程
Integer a = 5;//a是引用類型,引用了包裝對(duì)象的地址。
編譯器會(huì)完成對(duì)象的自動(dòng)裝箱:Integer a = Integer.valueOf(5);
自動(dòng)拆箱:從包裝類型的值,自動(dòng)變成 基本類型的值
int i = a;//a現(xiàn)在是包裝類型,沒(méi)法給變量賦值,需要把5取出來(lái)。
編譯器會(huì)完成自動(dòng)拆箱:int i = a.intValue();
創(chuàng)建包: cn.tedu.api
創(chuàng)建類: TestBox.java
package cn.tedu.api; /*本類用于測(cè)試自動(dòng)裝箱和自動(dòng)拆箱*/ public class TestBox { public static void main(String[] args) { //1.定義包裝類型的數(shù)據(jù) //回顧:以前創(chuàng)建包裝類型的兩種方式 Integer i1 = new Integer(127); Integer i2 = Integer.valueOf(127); //2.現(xiàn)在的方式: /*1.自動(dòng)裝箱:編譯器會(huì)自動(dòng)把基本類型int 5,包裝成包裝類型Integer * 然后交給i3來(lái)保存,自動(dòng)裝箱底層發(fā)生的代碼Integer.valueOf(5); * valueOf()的方向: int --> Integer*/ Integer i3 = 5;//不會(huì)報(bào)錯(cuò),這個(gè)現(xiàn)象就是自動(dòng)裝箱 /*2.自動(dòng)拆箱:編譯器會(huì)自動(dòng)把包裝類型的i1拆掉"箱子",變回基本類型數(shù)據(jù)127 * 然后交給i4來(lái)保存,自動(dòng)拆箱底層發(fā)生的代碼:i1.intValue(); * intValue()的方向:Integer -> int * */ int i4 = i1;//不會(huì)報(bào)錯(cuò),這個(gè)現(xiàn)象就是自動(dòng)拆箱 } }
BigDecimal:常用來(lái)解決精確的浮點(diǎn)數(shù)運(yùn)算不精確的問(wèn)題
方式一 :
BigDecimal(double val)
將double轉(zhuǎn)換為BigDecimal,后者是double的二進(jìn)制浮點(diǎn)值十進(jìn)制表示形式,有坑!
方式二 :
BigDecimal(String val)
將String類型字符串的形式轉(zhuǎn)換為BigDecimal
Add(BigDecimal bd) : 做加法運(yùn)算
Subtract(BigDecimal bd) : 做減法運(yùn)算
Multiply(BigDecimal bd) : 做乘法運(yùn)算
Divide(BigDecimal bd) : 做除法運(yùn)算,除不盡時(shí)會(huì)拋異常
Divide(BigDecimal bd,保留位數(shù),舍入方式) : 除不盡時(shí)使用
setScale(保留位數(shù),舍入方式) : 同上
pow(int n) : 求數(shù)據(jù)的幾次冪
創(chuàng)建包: cn.tedu.bigdecimal
創(chuàng)建類: TestBigDecimal.java
需求: 接收用戶輸入的兩個(gè)小數(shù),做運(yùn)算
package cn.tedu.api; import java.math.BigDecimal; import java.util.Scanner; public class TestBigDecimal { public static void main(String[] args) { //f1();//使用普通的 +-*/ 四則運(yùn)算,暴露出浮點(diǎn)數(shù)運(yùn)算不精確的問(wèn)題 f2();//使用BigDecimal來(lái)解決浮點(diǎn)數(shù)運(yùn)算不精確的問(wèn)題 } private static void f2() { //1.提示并接收用戶輸入的兩個(gè)小數(shù) System.out.println("請(qǐng)輸入您要計(jì)算的兩個(gè)小數(shù):"); double a = new Scanner(System.in).nextDouble(); double b = new Scanner(System.in).nextDouble(); //2.創(chuàng)建工具類對(duì)象,把基本類型a和b交給工具類對(duì)象BigDecimal來(lái)保存 /*1.最好不要用double作為構(gòu)造函數(shù)的參數(shù),不然還會(huì)有不精確的現(xiàn)象,有坑!!!*/ /*2.最好使用重載的,參數(shù)類型是String的構(gòu)造函數(shù) * double轉(zhuǎn)String,直接拼個(gè)空串就可以*/ BigDecimal bd1 = new BigDecimal(a+""); BigDecimal bd2 = new BigDecimal(b+""); //3.通過(guò)BigDecimal的對(duì)象來(lái)調(diào)用其方法,實(shí)現(xiàn)精確運(yùn)算 //3.1 定義BigDecimal類型的引用類型變量來(lái)保存結(jié)果 BigDecimal bd3; //3.2 Add(BigDecimal bd) : 做加法運(yùn)算 bd3 = bd1.add(bd2); System.out.println(bd3); //3.3 Subtract(BigDecimal bd) : 做減法運(yùn)算 bd3 = bd1.subtract(bd2); System.out.println(bd3); //3.4 Multiply(BigDecimal bd) : 做乘法運(yùn)算 bd3 = bd1.multiply(bd2); System.out.println(bd3); //3.5 Divide(BigDecimal bd) : 做除法運(yùn)算,除不盡時(shí)會(huì)拋異常 /*3.除法運(yùn)算,除不盡時(shí)會(huì)拋出異常ArithmeticException*/ //方案一:(除不盡時(shí)有問(wèn)題) //bd3 = bd1.divide(bd2); /*divide(m,n,o) m是要除以哪個(gè)對(duì)象,n指要保留幾位,o指舍入方式(比如四舍五入)*/ //方案二: bd3 = bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP); System.out.println(bd3); } private static void f1() { //1.提示并接收用戶輸入的兩個(gè)小數(shù) System.out.println("請(qǐng)輸入您要計(jì)算的兩個(gè)小數(shù):"); double a = new Scanner(System.in).nextDouble(); double b = new Scanner(System.in).nextDouble(); //2.做運(yùn)算 System.out.println(a + b);//不精確 System.out.println(a - b);//不精確 System.out.println(a * b);//不精確 System.out.println(a / b);//不精確 } }
舍入方式解析
ROUND_HALF_UP 四舍五入,五入 如:4.4結(jié)果是4; 4.5結(jié)果是5
ROUND_HALF_DOWN 五舍六入,五不入 如:4.5結(jié)果是4; 4.6結(jié)果是5
ROUND_HALF_EVEN 公平舍入(銀行常用)
比如:在5和6之間,靠近5就舍棄成5,靠近6就進(jìn)位成6,如果是5.5,就找偶數(shù),變成6
ROUND_UP 直接進(jìn)位,不算0.1還是0.9,都進(jìn)位
ROUND_DOWN 直接舍棄,不算0.1還是0.9,都舍棄
ROUND_CEILING(天花板) 向上取整,取實(shí)際值的大值
朝正無(wú)窮方向round 如果為正數(shù),行為和round_up一樣,如果為負(fù)數(shù),行為和round_down一樣
ROUND_FLOOR(地板) 向下取整,取實(shí)際值的小值
朝負(fù)無(wú)窮方向round 如果為正數(shù),行為和round_down一樣,如果為負(fù)數(shù),行為和round_up一樣
“JAVA正則表達(dá)式、包裝類、自動(dòng)裝箱/自動(dòng)拆箱及BigDecimal怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。