最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何用正則表達(dá)式驗證數(shù)字字符串詳解

 更新時間:2026年05月12日 09:38:58   作者:藍(lán)鯨軟工  
Java的正則表達(dá)式通過包提供了強(qiáng)大的字符串處理能力,無論是簡單的字符串驗證,還是復(fù)雜的模式提取,Pattern和Matcher都能滿足需求,這篇文章主要介紹了Java如何用正則表達(dá)式驗證數(shù)字字符串的相關(guān)資料,需要的朋友可以參考下

前言

今天咱們要聊一個看似簡單卻暗藏玄機(jī)的話題——Java中使用正則表達(dá)式來驗證數(shù)字字符串。這個話題聽起來好像沒啥難度,但實際操作中總是會遇到各種“坑”,尤其是當(dāng)你第一次嘗試用正則表達(dá)式時,可能會覺得這些小東西有點(diǎn)“調(diào)皮”。別擔(dān)心,閆工今天就帶著大家一起來征服這個“小山頭”!

一、什么是數(shù)字字符串?

在開始之前,咱們先明確一下什么是數(shù)字字符串。簡單來說,數(shù)字字符串就是只包含數(shù)字字符的字符串,比如"123"、"456789"等等。但是,在實際開發(fā)中,我們可能會遇到以下幾種情況:

  1. 純整數(shù):如"123"、"-456"
  2. 小數(shù):如"12.34"、"-56.78"
  3. 帶符號的數(shù)字:如"+789"、"-0"

每種情況對應(yīng)的正則表達(dá)式都會有所不同,所以咱們得逐一分析。

二、驗證純整數(shù)

首先,我們來驗證一個字符串是否是純整數(shù)。這里又分為兩種情況:

情況一:只允許非負(fù)整數(shù)(即不帶符號的正整數(shù))

正則表達(dá)式

^[0-9]+$

代碼示例

public class NumberValidator {
    public static boolean isNonNegativeInteger(String str) {
        String regex = "^[0-9]+$";
        return str.matches(regex);
    }

    public static void main(String[] args) {
        System.out.println(isNonNegativeInteger("123"));   // true
        System.out.println(isNonNegativeInteger("abc"));   // false
        System.out.println(isNonNegativeInteger("-456"));  // false
    }
}

解釋:

  • ^ 表示字符串的開始。
  • [0-9] 表示一個數(shù)字字符(0到9)。
  • + 表示前面的內(nèi)容可以出現(xiàn)一次或多次。
  • $ 表示字符串的結(jié)束。

所以,這個正則表達(dá)式的意思是:從頭到尾全是數(shù)字字符,并且至少有一個數(shù)字字符。

情況二:允許負(fù)整數(shù)

正則表達(dá)式

^-?[0-9]+$

代碼示例

public class NumberValidator {
    public static boolean isInteger(String str) {
        String regex = "^-?[0-9]+$";
        return str.matches(regex);
    }

    public static void main(String[] args) {
        System.out.println(isInteger("123"));     // true
        System.out.println(isInteger("-456"));    // true
        System.out.println(isInteger("+789"));    // false(因為這里允許了負(fù)號,但不包括正號)
    }
}

解釋:

  • -? 表示可選的負(fù)號。這里的問號表示前面的內(nèi)容可以出現(xiàn)0次或1次。

注意,這個正則表達(dá)式只允許負(fù)號,而不包括正號(比如"+789"會被認(rèn)為是不合法的)。如果我們想同時支持正號和負(fù)號,可以稍作修改:

支持正號和負(fù)號

正則表達(dá)式:^[+-]?[0-9]+$

代碼示例:

public class NumberValidator {
    public static boolean isSignedInteger(String str) {
        String regex = "^[+-]?[0-9]+$";
        return str.matches(regex);
    }

    public static void main(String[] args) {
        System.out.println(isSignedInteger("123"));     // true
        System.out.println(isSignedInteger("-456"));    // true
        System.out.println(isSignedInteger("+789"));    // true
        System.out.println(isSignedInteger("abc"));     // false
    }
}

三、驗證小數(shù)(浮點(diǎn)數(shù))

接下來,咱們來看看如何驗證帶小數(shù)點(diǎn)的數(shù)字。這里需要考慮以下幾種情況:

  1. 必須包含一個小數(shù)點(diǎn)。
  2. 小數(shù)點(diǎn)前后必須有至少一個數(shù)字。

正則表達(dá)式

^[+-]?[0-9]+(\\.[0-9]+)?$

代碼示例

public class NumberValidator {
    public static boolean isDecimal(String str) {
        String regex = "^[+-]?[0-9]+(\\.[0-9]+)?$/";
        return str.matches(regex);
    }

    public static void main(String[] args) {
        System.out.println(isDecimal("12.34"));   // true
        System.out.println(isDecimal("-56.78"));  // true
        System.out.println(isDecimal("+789"));    // false(因為沒有小數(shù)點(diǎn))
        System.out.println(isDecimal(".9"));      // false(小數(shù)點(diǎn)前必須有數(shù)字)
        System.out.println(isDecimal("123."));    // false(小數(shù)點(diǎn)后必須有數(shù)字)
    }
}

解釋:

  • [0-9]+ 表示至少一個數(shù)字。
  • (\\.[0-9]+)? 表示可選的小數(shù)部分,其中:
    • \\. 表示轉(zhuǎn)義字符“.”(因為在Java中需要用雙斜杠來表示單個斜杠)。
    • [0-9]+ 表示小數(shù)點(diǎn)后至少有一個數(shù)字。

四、驗證整數(shù)或小數(shù)

有時候,我們需要同時支持整數(shù)和小數(shù)的情況。比如,"123"是合法的,"45.67"也是合法的。

正則表達(dá)式

^[+-]?[0-9]+(\\.[0-9]*)?$

代碼示例

public class NumberValidator {
    public static boolean isNumber(String str) {
        String regex = "^[+-]?[0-9]+(\\.[0-9]*)?$/";
        return str.matches(regex);
    }

    public static void main(String[] args) {
        System.out.println(isNumber("123"));       // true
        System.out.println(isNumber("-45.67"));   // true
        System.out.println(isNumber("+89"));      // true
        System.out.println(isNumber(".123"));     // false(小數(shù)點(diǎn)前必須有數(shù)字)
        System.out.println(isNumber("123."));     // false(小數(shù)點(diǎn)后不能沒有數(shù)字)
    }
}

解釋:

  • [0-9]+ 表示整數(shù)部分,至少一個數(shù)字。
  • (\\.[0-9]*)? 表示可選的小數(shù)部分:
    • . 前面的斜杠是轉(zhuǎn)義符。
    • [0-9]* 表示小數(shù)點(diǎn)后可以有零個或多個數(shù)字。

五、驗證非負(fù)整數(shù)和非負(fù)小數(shù)

有時候,我們需要確保數(shù)字是非負(fù)的(即不帶負(fù)號)。比如,金額、年齡等場景。

正則表達(dá)式

^[0-9]+(\\.[0-9]*)?$

代碼示例

public class NumberValidator {
    public static boolean isNonNegativeNumber(String str) {
        String regex = "^[0-9]+(\\.[0-9]*)?$/";
        return str.matches(regex);
    }

    public static void main(String[] args) {
        System.out.println(isNonNegativeNumber("123"));       // true
        System.out.println(isNonNegativeNumber("45.67"));    // true
        System.out.println(isNonNegativeNumber("-89"));      // false
        System.out.println(isNonNegativeNumber("+90"));      // false(因為不允許正號)
    }
}

六、特殊情況處理

在實際應(yīng)用中,我們可能會遇到以下特殊情況:

  1. 允許科學(xué)計數(shù)法:比如"1.2e3"或者"-45E+6"

    • 這個場景比較復(fù)雜,需要額外的正則表達(dá)式來處理。
  2. 不允許前導(dǎo)零:比如"0123"會被認(rèn)為是非法的。

    • 如果有這個需求,可以在正則表達(dá)式中添加檢查。
  3. 固定小數(shù)位數(shù):比如必須保留兩位小數(shù)。

    • 這個可以通過調(diào)整小數(shù)部分的數(shù)字個數(shù)來實現(xiàn)。

七、常見錯誤和注意點(diǎn)

  1. 轉(zhuǎn)義字符問題

    • 在Java中,字符串中的正則表達(dá)式需要使用雙斜杠來表示單個斜杠(如\\.)。
  2. 邊界情況

    • 確保小數(shù)點(diǎn)前后都有數(shù)字。
    • 確保不出現(xiàn)多個小數(shù)點(diǎn)(比如"12.34.56"是非法的)。
  3. 符號處理

    • 如果不需要正號或負(fù)號,可以去掉相關(guān)的部分。
    • 同時支持正號和負(fù)號時,確保符號只出現(xiàn)在最前面。

總結(jié)

通過以上幾種常見的數(shù)字驗證方式,我們可以根據(jù)實際需求選擇合適的正則表達(dá)式。記住,在編寫正則表達(dá)式時,要仔細(xì)考慮邊界情況,并進(jìn)行充分的測試以確保其正確性。

附:Java正則表達(dá)式提取字符串中的數(shù)字

直接上代碼:

String reg = "\\D+(\\d+)$";    //提取字符串末尾的數(shù)字:封妖塔守衛(wèi)71 == >> 71  
String s = monster.getMonsterName();  
Pattern p2 = Pattern.compile(reg);  
Matcher m2 = p2.matcher(s);  
int historyHighestLevel = 1;
if(m2.find()){  
    historyHighestLevel = Integer.parseInt(m2.group(1));
    System.out.println(m2.group(1));  // 組提取字符串  
}

相似的我也可以提起字符串中間的一個或多個數(shù)字:

reg = "\\D+(\\d+)\\D+";  // 提起字符串中間的數(shù)字
reg = "\\D+(\\d+)\\D+(\\d+)\\D*";  // 提起字符串中間的多個數(shù)字

再看一例子:

String sqlServerDateTime = "CAST(0x993902CE AS DATETIME)";  
        String reg = "CAST\\((0x[0-9-a-f-A-F]+) AS DATETIME\\)";    // ( 為特殊字符,需要用 \\ 轉(zhuǎn)義
        Pattern p = Pattern.compile(reg); 
        Matcher m = p.matcher(sqlServerDateTime);
        if(m.find()){
            rawData = m.group(1);
            System.out.println(rawData);  // 組提取字符串 0x993902CE  
        }

2. 匹配所有圖片格式:

String reg = ".*\\.(?i)(jpg|jpeg|gif|bmp|png)";
if(filePath.matches(reg)){

}

注意 (jpg|jpeg|gif|bmp|png) 和 [a|b] 的區(qū)別,一個是多個字符中任意一個,一個是多個字母中任意一個,不要搞混了。

到此這篇關(guān)于Java如何用正則表達(dá)式驗證數(shù)字字符串的文章就介紹到這了,更多相關(guān)Java正則表達(dá)式驗證數(shù)字字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java觀察者模式之實現(xiàn)對象間的一對多依賴

    Java觀察者模式之實現(xiàn)對象間的一對多依賴

    這篇文章主要介紹了Java觀察者模式之實現(xiàn)對象間的一對多依賴的方法,Java觀察者模式是一種行為型設(shè)計模式,用于實現(xiàn)對象之間的消息傳遞和通信,文中有詳細(xì)的實現(xiàn)步驟和代碼示例,,需要的朋友可以參考下
    2023-05-05
  • 全面匯總SpringBoot和SpringClould常用注解

    全面匯總SpringBoot和SpringClould常用注解

    Java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時進(jìn)行解析和使用,起到說明、配置的功能,這篇文章就帶你來了解一下
    2021-08-08
  • Java Web開發(fā)入門書籍實例解析(總結(jié)一)

    Java Web開發(fā)入門書籍實例解析(總結(jié)一)

    從事Java Web開發(fā)這一段時間來,對Java 面向?qū)ο蟮乃枷牒蚆VC開發(fā)模式可以說已經(jīng)熟悉了。我當(dāng)前參與的項目使用的框架是Spring、SpringMVC、Hibernate。下面腳本之家小編給大家整理一篇教程幫助大家學(xué)習(xí)javaweb相關(guān)知識,感興趣的朋友可以參考下
    2016-03-03
  • 深入探索SpringBoot3中Profiles的多環(huán)境配置

    深入探索SpringBoot3中Profiles的多環(huán)境配置

    在當(dāng)今復(fù)雜的軟件開發(fā)領(lǐng)域,一個應(yīng)用往往需要在開發(fā)、測試、生產(chǎn)等多個環(huán)境中運(yùn)行,下面我們就來深入探索一下SpringBoot3中Profiles的多環(huán)境配置吧
    2025-12-12
  • 詳解JDK中ExecutorService與Callable和Future對線程的支持

    詳解JDK中ExecutorService與Callable和Future對線程的支持

    這篇文章主要介紹了詳解JDK中ExecutorService與Callable和Future對線程的支持的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Springboot中redis使用lettuce連接池經(jīng)常連接超時問題分析及解決

    Springboot中redis使用lettuce連接池經(jīng)常連接超時問題分析及解決

    文章主要介紹了在Spring?Boot項目中,使用Lettuce作為Redis客戶端時遇到的問題——連接在一段時間后會自動掉線,問題的根源在于Lettuce的空閑連接處理機(jī)制,文章提供了Spring?Boot?2.3及以上版本的解決方案,即通過配置解決,或者排除Lettuce并采用Jedis
    2025-11-11
  • mybatis分頁效果實現(xiàn)代碼

    mybatis分頁效果實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了mybatis分頁效果的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java前后端任意參數(shù)類型轉(zhuǎn)換方式(Date、LocalDateTime、BigDecimal)

    Java前后端任意參數(shù)類型轉(zhuǎn)換方式(Date、LocalDateTime、BigDecimal)

    這篇文章主要介紹了Java前后端任意參數(shù)類型轉(zhuǎn)換方式(Date、LocalDateTime、BigDecimal),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java8 Zip 壓縮與解壓縮的實現(xiàn)

    Java8 Zip 壓縮與解壓縮的實現(xiàn)

    這篇文章主要介紹了Java8 Zip 壓縮與解壓縮的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • mybatis集成到spring的方式詳解

    mybatis集成到spring的方式詳解

    這篇文章主要介紹了mybatis是如何集成到spring的,將mybatis集成到spring之后,就可以被spring的ioc容器托管,再也不用自己創(chuàng)建SqlSessionFactory?、打開SqlSession等操作,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評論

桐庐县| 灵寿县| 西吉县| 泾川县| 灵宝市| 锡林郭勒盟| 石家庄市| 布拖县| 寻乌县| 长春市| 会同县| 吴川市| 伊金霍洛旗| 阿勒泰市| 南岸区| 屏边| 新郑市| 常宁市| 土默特右旗| 淮滨县| 凌云县| 武胜县| 浏阳市| 瑞安市| 长宁区| 陕西省| 新疆| 筠连县| 宜城市| 常德市| 庆安县| 大邑县| 长宁区| 江口县| 万全县| 荔波县| 吉安市| 辉县市| 准格尔旗| 西华县| 巴南区|