天天看點

java -- MathBigIntegerBigDecimal類和基本類型的包裝類正規表達式

作者:monesy小孩

Math

java.lang.Math 類包含用于執行基本數學運算的方法,如初等指數、對數、平方根和三角函數。類似這樣的工具類,其所有方法均為靜态方法,并且不會建立對象,調用起來非常簡單。

Math.PI

// 靜态常量
public static final double PI = 3.14159265358979323846;
           

abs

// 傳回參數的絕對值
public static int abs(int a)
           
System.out.println(Math.abs(-10)); // 10
           

round

// 按照四舍五入傳回最接近參數的int類型
// 參數為float類型 傳回值為int類型
public static int round(float a)
// 參數為double類型 傳回值為long類型
public static long round(double a)
           
System.out.println(Math.round(3.14f)); // 3
System.out.println(Math.round(3.5)); // 4
           

ceil

// 向上取整, 傳回double類型
public static double ceil(double a)
           
System.out.println(Math.ceil(10.1)); // 11.0
System.out.println(Math.ceil(-10.9)); // -10.0
           

floor

// 向下取整, 傳回double類型
public static double floor(double a)
           
System.out.println(Math.floor(10.9)); // 10.0
System.out.println(Math.floor(-10.1)); // -11.0
           

max

// 傳回兩個數的最大值, 參數可以是浮點型 或 整型
public static int max(int a, int b)
           
System.out.println(Math.max(10, 20)); // 20
           

min

// 傳回兩個數的最小值, 參數可以是浮點型 或 整型
public static int min(int a, int b)
           
System.out.println(Math.min(10, 20)); // 10
           

pow

// 傳回 a的b次幂
public static double pow(double a, double b)
           
System.out.println(Math.pow(3, 5)); // 243.0
           

random

// 傳回随機小數[0-1), 該方法調用了java.util.Random類
public static double random()
           
System.out.println(Math.random()); // 0.20964406221200327

// 1-100的随機整數
System.out.println(Math.floor(Math.random() * 100) + 1);
           

BigInteger

java.math.BigInteger類,不可變的任意精度的整數。如果運算中,資料的範圍超過了long類型後,可以使用BigInteger類實作,該類的計算整數是不限制長度的。

// 構造方法
// 超過long類型的範圍,已經不能稱為數字了,是以構造方法中采用字元串的形式來表示超大整數,将超大整數封裝成BigInteger對象。
public BigInteger(String val)
           
BigInteger b1 = new BigInteger("123213124124543123");
BigInteger b2 = new BigInteger("123213124124543123");
           

add

// 傳回其值為 (this + val) 的 BigInteger,超大整數加法運算
public BigInteger add(BigInteger val)
           
System.out.println(b1.add(b2));
// 246426248249086246
           

subtract

// 傳回其值為 (this - val) 的 BigInteger,超大整數加法運算
public BigInteger subtract(BigInteger val)
           
System.out.println(b1.subtract(b2));
// 0
           

multiply

// 傳回其值為 (this * val) 的 BigInteger,超大整數加法運算
public BigInteger multiply(BigInteger val)
           
System.out.println(b1.multiply(b2));
// 15181473956530070530603493486593129
           

divide

// 傳回其值為 (this / val) 的 BigInteger,超大整數加法運算
public BigInteger divide(BigInteger val)
           
System.out.println(b1.divide(b2));
// 1
           

BigDecimal

java.math.BigDecimal類,不可變的、任意精度的有符号十進制數。該類可以實作超大浮點資料的精确運算。

// 構造方法
public BigDecimal(String val)
           
BigDecimal bd1 = new BigDecimal("0.01");
BigDecimal bd2 = new BigDecimal("0.05");
           

常用方法

BigDecimal的 加減乘 方法與BigInteger相同, 除法在可以除盡的情況下可以使用

若除不盡時 無法得到一個精确的小數 會報錯, 需要傳入額外的參數

// add 加法
System.out.println(bd1.add(bd2)); // 0.06
// subtract 減法
System.out.println(bd1.subtract(bd2)); // -0.04
// multiply 乘法
System.out.println(bd1.multiply(bd2)); // 0.0005
           

divide

public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
// BigDecimal divesor:此 BigDecimal 要除以的值
// int scale 保留幾位小數
// int roundingMode 模式:(常用)
	// BigDecimal.ROUND_HALF_UP 四舍五入
	// BigDecimal.ROUND_UP 向上取整
	// BigDecimal.ROUND_DOWN 向下取整
           
System.out.println(bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP));
// 0.20
           

基本類型包裝類

Java提供了兩個類型系統,基本類型與引用類型,使用基本類型在于效率,然而很多情況,會建立對象使用,因為對象可以做更多的功能,如果想要我們的基本類型像對象一樣操作,就可以使用基本類型對應的包裝類,如下:

基本類型 對應的包裝類(位于java.lang包中)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

靜态方法

// 傳回表示指定的 int 值的 Integer 執行個體
public static Integer valueOf(int i)
// 傳回表示指定的 String 值的 Integer 執行個體
public static Integer valueOf(String s)
           
Integer i1 = Integer.valueOf(100);
System.out.println(i1); // 100
Integer i2 = Integer.valueOf("100");
System.out.println(i2); // 100
           

裝箱與拆箱

基本類型與對應的包裝類對象之間,來回轉換的過程稱為”裝箱“與”拆箱“:

  • 裝箱:從基本類型轉換為對應的包裝類對象。
  • 拆箱:從包裝類對象轉換為對應的基本類型。

基本數值 --> 包裝對象

Integer i = new Integer(4);//使用構造函數函數
Integer ii = Integer.valueOf(4);//使用包裝類中的valueOf方法
           

包裝對象 --> 基本數值

int num = i.intValue();
           

自動裝箱與自動拆箱

由于經常要做基本類型與包裝類之間的轉換,從Java 5(JDK 1.5)開始,基本類型與包裝類的裝箱、拆箱動作可以自動完成。

Integer i = 4; //自動裝箱。相當于Integer i = Integer.valueOf(4);
i = i + 5; //等号右邊:将i對象轉成基本數值(自動拆箱) i.intValue() + 5;
//加法運算完成後,再次裝箱,把基本數值轉成對象。
           

基本類型與字元串之間的轉換

基本類型轉換為String

  • 方式一:直接在數字後加一個空字元串
  • 方式二:通過String類靜态方法valueOf()
public static void main(String[] args) {
    //int --- String
    //方式1
    String s1 = 10 + "";
    System.out.println(s1);
    //方式2
    //public static String valueOf(int i)
    String s2 = String.valueOf(10);
    System.out.println(s2);
}
           

String轉換成基本類型

除了Character類之外,其他所有包裝類都具有parseXxx的靜态方法,可以将字元串參數轉換為對應的基本類型:

// 将字元串參數轉換為對應的int基本類型。
public static int parseInt(String s)
// 将字元串參數轉換為對應的double基本類型。
public static double parseDouble(String s)
// 字元串參數轉換為對應的boolean基本類型。
public static boolean parseBoolean(String s)
// 字元串參數轉換為char基本類型,使用String類中的charAt方法
public char charAt(int index)
           
// String -> int
System.out.println(Integer.parseInt("10"));
// String -> doubel
System.out.println(Double.parseDouble("10.21"));
// String -> boolean
System.out.println(Boolean.parseBoolean("true"));
// String -> char
System.out.println("a".charAt(0));
           

compare

// 構造方法
public static int compare(int x, int y)
// x > y 傳回 1
// x = y 傳回 0
// x < y 傳回 -1
           
System.out.println(Integer.compare(20, 20));
System.out.println(Double.compare(20.3, 20.1));
           

正規表達式

正規表達式(regular expression)是對字元串操作的一種規則, 用來做字元串比對

正則規則-字元類

規則寫法 規則含義
[abc] a、b 或 c(簡單類)
[^abc] 任何字元,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A到 Z,兩頭的字母包括在内(範圍)
[0-9] 0到9,兩頭的數字包括在内(範圍)
[a-zA-Z0-9] a 到 z 或 A到 Z或0-9

正則規則-預定義字元類

規則寫法 規則含義
. 任何字元
\d 數字[0-9]
\D 非數字 [^0-9]
\w 單詞字元 [a-zA-Z0-9_]
\W 非單詞字元[^a-zA-Z0-9_]

正則規則-數量詞

{n} 比對n次
{n,} 比對n次或多次
{n,m}比對n次到m次
           

String類matches方法

public boolean matches(String regex)
// 将字元串與傳入的正規表達式進行比對, 傳回布爾值
           
public static void main(String[] args){
    //驗證手機号碼
    String tel = "13912345678";
    String telRegex = "1[345678][0-9]{9}";
    boolean flag = tel.matches(telRegex);
    System.out.println(flag);
    //驗證郵件位址
    String email = "[email protected].";
    String emailRegex = "[a-zA-Z0-9_]+@([a-z]+\\.[a-z]+)+";
    flag = email.matches(emailRegex);
    System.out.println(flag);
}
           

String類split方法

String[] split(String regex)
// 傳遞正規表達式規則,以正則規則對字元串進行切割
           
String str1 = "ab  a   bbb  abc   aa      c";
// String[] strArr =str1.split(" +");
String[] strArr =str1.split("\\s+");
System.out.println(Arrays.toString(strArr));