java -- Math、BigInteger、BigDecimal類和基本類型的包裝類、正則表達式

来源:https://www.cnblogs.com/paopaoT/archive/2023/04/07/17297081.html
-Advertisement-
Play Games

ps 命令速查備忘清單 Linux我們提供了一個名為 ps 的實用程式,用於查看與系統上的進程相關的信息,它是 Process Status 的縮寫這份 ps 命令備忘清單的快速參考列表,包含常用選項和示例。入門,為開發人員分享快速參考備忘單。 開發速查表大綱 入門 語法 示例 查看系統上的每個進程 ...


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));

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本博文記錄CSS中比較常用的背景屬性,包括背景顏色:background-color、背景圖片:background-image、背景平鋪:background-repeat、背景位置:background-position和背景附著:background-attachment。同時記錄了背景色半透... ...
  • 本文分享自天翼雲開發者社區@《基於SpringBoot實現單元測試的多種情境/方法(二)》, 作者:才開始學技術的小白 1 Mock基礎回顧 在上一篇分享中我們詳細介紹了簡單的、用mock來模擬介面測試環境的方法,具體的使用樣例我們再回顧一下: 1.首先是最簡單的不需要傳參的示例,需要註意的是,可能 ...
  • 簡介 外觀模式(Facade Pattern),也叫門面模式,是一種結構型設計模式。它向現有的系統添加一個高層介面,隱藏子系統的複雜性,這個介面使得子系統更加容易使用。 如果你需要一個指向複雜子系統的直接介面,且該介面的功能有限,則可以使用外觀模式。或者需要將子系統組織為多層結構,可以使用外觀。 作 ...
  • 一個非常簡單的小項目。 看到了楊旭大佬的教學視頻,自己跟著實現了一下,完善了一下游戲邏輯。 通過空格鍵進行控制。 游戲中可按 P 鍵 暫停/恢復 游戲 項目結構 · ├── Cargo.lock ├── Cargo.toml ├── src/ │ ├── main.rs │ ├──bird/ │ │ ...
  • 本文介紹了學習Spring源碼前需要掌握的核心知識點,包括IOC、AOP、Bean生命周期、初始化和Transaction事務。通過Hello World示例,講解瞭如何使用Spring,並指出了深入瞭解Spring內部機制的方向。 ...
  • 約束(Constraints) 上一章介紹了向模型中添加一些業務邏輯的能力。我們現在可以將按鈕鏈接到業務代碼,但如何防止用戶輸入錯誤的數據?例如,在我們的房地產模塊中,沒有什麼可以阻止用戶設置負預期價格。 odoo提供了兩種設置自動驗證恆定式的方法:Python約束 and SQL約束。 SQL 參 ...
  • Mybatis常見問題 1,大於號、小於號在sql語句中的轉換 使用 mybatis 時 sql 語句是寫在 xml 文件中,如果 sql 中有一些特殊的字元的話,比如< ,<=,>,>=等符號,會引起 xml 格式的錯誤,需要替換掉,或者不被轉義。 有兩種方法可以解決:轉義字元和標記 CDATA ...
  • SpringCloud Eureka-服務註冊與發現02 3.搭建EurekaServer集群-實現負載均衡&故障容錯 3.1為什麼需要集群EurekaServer? 微服務RPC遠程服務調用最核心的是高可用 如果註冊中心只有1個,如果出現故障,會導致整個服務環境不可用 解決辦法就是搭建Eureka ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...