java提取字元串數字,Java獲取字元串中的數字

来源:https://www.cnblogs.com/fanshuyao/archive/2020/01/17/12206747.html
-Advertisement-
Play Games

©Copyright 蕃薯耀 2020-01-17 https://www.cnblogs.com/fanshuyao/ 具體的方法如下: /** * 把字元串數字類型的數字取出來(只取遇到非數字字元前,包括空格) * @param str * <li>"1-0我5013我24a5c6" 》 1</ ...


================================

©Copyright 蕃薯耀 2020-01-17

https://www.cnblogs.com/fanshuyao/

 

 具體的方法如下:

/**
     * 把字元串數字類型的數字取出來(只取遇到非數字字元前,包括空格)
     * @param str
     * <li>"1-0我5013我24a5c6"    》 1</li>
     * <li>"10  5 013我24a 5c6"  》 10</li>
     * <li>"105013我24a5c6"      》 105013</li>
     * <li>"000"                 》 000</li>
     * <li>"00010123600"         》 00010123600</li>
     * <li>"好20我1a2b"           》  空字元串</li>
     * @return
     */
    public static String getPrefixNumberText(String str){
        if(StringUtils.isBlank(str)){
            throw new RuntimeException("參數str不能為空");
        }
        StringBuffer number = new StringBuffer("");
        
        String[] strArray = str.split("");
        for (int i=1; i<strArray.length; i++) {
            if(RegUtils.isNumberText(strArray[i])){
                number.append(strArray[i]);
            }else{
                break;
            }
        }
        return number.toString();
    }
    
    
    /**
     * 把字元串數字類型的數字取出來(只取遇到非數字字元前,但不包括空格)
     * @param str
     * <li>"1-0我5013我24a5c6"    》 1</li>
     * <li>"10  5 013我24a 5c6"  》 105013</li>
     * <li>"105013我24a5c6"      》 105013</li>
     * <li>"000"                 》 000</li>
     * <li>"00010123600"         》 00010123600</li>
     * <li>"00010123我600"        》 00010123</li>
     * @return
     */
    public static String getPrefixNumberTextIgnoreSpace(String str){
        if(StringUtils.isBlank(str)){
            throw new RuntimeException("參數str不能為空");
        }
        StringBuffer number = new StringBuffer("");
        
        String[] strArray = str.split("");
        for (String string : strArray) {
            if(!StringUtils.isBlank(string)){
                if(RegUtils.isNumberText(string)){
                    number.append(string);
                }else{
                    break;
                }
            }
        }
        return number.toString();
    }
    
    
    /**
     * 把字元串數字類型的所有數字取出來
     * @param str
     * <li>"1-000我10123我60#0"       》 100010123600</li>
     * <li>"00010-+123我600"         》 00010123600</li>
     * <li>"我是2019我600"            》 2019600</li>
     * <li>"我是20 -19我    600"         》 2019600</li>
     * @return
     */
    public static String getNumberText(String str){
        if(StringUtils.isBlank(str)){
            throw new RuntimeException("參數str不能為空");
        }
        StringBuffer number = new StringBuffer("");
        
        String[] strArray = str.split("");
        for (String string : strArray) {
            if(!StringUtils.isBlank(string) && RegUtils.isNumberText(string)){
                number.append(string);
            }
        }
        return number.toString();
    }
    
    
    /**
     * 把字元串數字類型的數字取出來(只取遇到非數字字元前,不包括空格)轉換成數字
     * @param str
     * <li>"1-0我5013我24a5c6"    》 1</li>
     * <li>"10  5 013我24a 5c6"  》 105013</li>
     * <li>"105013我24a5c6"      》 105013</li>
     * <li>"000"                 》 0</li>
     * <li>"00010123600"         》 10123600</li>
     * @return
     */
    public static long getPrefixNumber(String str){
        String number = getPrefixNumberTextIgnoreSpace(str);
        if(StringUtils.isBlank(number)){
            return 0;
        }
        
        //去掉前面為0的,如0099變成99
        String[] texts = number.split("");
        StringBuffer numbers = new StringBuffer("");
        for (String text : texts) {
            if(numbers.length() < 1){
                if(text == "0"){
                    continue;
                }
            }
            numbers.append(text);
        }
        
        if(numbers.length() < 1){
            return 0;
        }
        return Long.parseLong(numbers.toString());
    }
    
    
    /**
     * 把字元串數字類型的數字取出來轉換成數字
     * @param str
     * <li>"1-000我10123我60#0"   》 100010123600</li>
     * <li>"00010-+123我600"      》 10123600</li>
     * <li>"我是2019我600"         》 2019600</li>
     * <li>"我是20 -19我    600"     》 2019600</li>
     * @return
     */
    public static long getNumber(String str){
        String number = getNumberText(str);
        if(StringUtils.isBlank(number)){
            return 0;
        }
        
        //去掉前面為0的,如0099變成99
        String[] texts = number.split("");
        StringBuffer numbers = new StringBuffer("");
        for (String text : texts) {
            if(numbers.length() < 1){
                if(text == "0"){
                    continue;
                }
            }
            numbers.append(text);
        }
        
        if(numbers.length() < 1){
            return 0;
        }
        return Long.parseLong(numbers.toString());
    }
    

 

正則表達式工具類:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

/**
 * 正則表達式工具類
 *
 */
public class RegUtils {
    /**
     * 郵箱
     */
    public static final String EMAIL = "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";
    /**
     * 手機號碼
     */
    public static final String PHONE = "^(1[3-9]([0-9]{9}))$";
    /**
     * 僅中文
     */
    public static final String CHINESE = "^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$";
    /**
     * 整數
     */
    public static final String INTEGER = "^-?[1-9]\\d*$";
    /**
     * 數字
     */
    public static final String NUMBER = "^([+-]?)\\d*\\.?\\d+$";
    /**
     * 正整數
     */
    public static final String INTEGER_POS = "^[1-9]\\d*$";
    /**
     * 浮點數
     */
    public static final String FLOAT = "^([+-]?)\\d*\\.\\d+$";
    /**
     * 正浮點數
     */
    public static final String FLOAT_POS = "^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$";
    /**
     * 是否為正整數數字,包括0(00,01非數字)
     */
    public static final String INTEGER_WITH_ZERO_POS = "^(([0-9])|([1-9]([0-9]+)))$";
    /**
     * 是否為整數數字,包括正、負整數,包括0(00,01非數字)
     */
    public static final String NUMBER_WITH_ZERO = "^((-)?(([0-9])|([1-9]([0-9]+))))$";
    /**
     * 是否為數字字元串
     */
    public static final String NUMBER_TEXT = "^([0-9]+)$";
    /**
     * 數字(整數、0、浮點數),可以判斷是否金額,也可以是負數
     */
    public static final String NUMBER_ALL = "^((-)?(([0-9])|([1-9][0-9]+))(\\.([0-9]+))?)$";
    /**
     * QQ,5-14位
     */
    public static final String QQ = "^[1-9][0-9]{4,13}$";
    /**
     * IP地址
     */
    public static final String IP = "((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))";
    /**
     * 郵編
     */
    public static final String POST_CODE = "[1-9]\\d{5}(?!\\d)";
    /**
     * 普通日期
     */
    public static final String DATE = "^[1-9]\\d{3}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3[0-1]))$";
    /**
     * 複雜日期,不區分閏年的2月
     * 日期格式:2017-10-19
     * 或2017/10/19
     * 或2017.10.19
     * 或2017年10月19日
     * 最大31天的月份:(((01|03|05|07|08|10|12))-((0[1-9])|([1-2][0-9])|(3[0-1])))
     * 最大30天的月份:(((04|06|11))-((0[1-9])|([1-2][0-9])|(30)))
     * 最大29天的月份:(02-((0[1-9])|([1-2][0-9])))
     */
    public static final String DATE_COMPLEX = "^(([1-2]\\d{3})(-|/|.|年)((((01|03|05|07|08|10|12))(-|/|.|月)((0[1-9])|([1-2][0-9])|(3[0-1])))|(((04|06|11))(-|/|.|月)((0[1-9])|([1-2][0-9])|(30)))|(02-((0[1-9])|([1-2][0-9]))))(日)?)$";
    
    /**
     * 複雜的日期,區分閏年的2月
     * 這個日期校驗能區分閏年的2月,格式如下:2017-10-19
     * (見:http://www.jb51.net/article/50905.htm)
     * ^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$
     */
    public static final String DATE_COMPLEX_LEAP_YEAR = "^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$";
    
    
    /**
     * 正則表達式校驗,符合返回True
     * @param regex 正則表達式
     * @param content 校驗的內容
     * @return
     */
    public static boolean isMatch(String regex, CharSequence content){
        return Pattern.matches(regex, content);
    }
    
    
    /**
     * 校驗手機號碼
     * @param mobile
     * @return
     */
    public static final boolean isMoblie(String mobile){
        boolean flag = false;
        if (null != mobile && !mobile.trim().equals("") && mobile.trim().length() == 11) {
            Pattern pattern = Pattern.compile(PHONE);
            Matcher matcher = pattern.matcher(mobile.trim());
            flag = matcher.matches();
        }
        return flag;
    }
    
    
    /**
     * 校驗郵箱
     * @param value
     * @return
     */
    public static final boolean isEmail(String value){
        boolean flag = false;
        if (null != value && !value.trim().equals("")) {
            Pattern pattern = Pattern.compile(EMAIL);
            Matcher matcher = pattern.matcher(value.trim());
            flag = matcher.matches();
        }
        return flag;
    }
    
    
    /**
     * 校驗密碼
     * @param password
     * @return 長度符合返回true,否則為false
     */
    public static final boolean isPassword(String password){
        boolean flag = false;
        if (null != password && !password.trim().equals("")) {
            password = password.trim();
            if(password.length() >= 6 && password.length() <= 30){
                return true;
            }
        }
        return flag;
    }
    
    
    /**
     * 校驗手機驗證碼
     * @param value
     * @return 符合正則表達式返回true,否則返回false
     */
    public static final boolean isPhoneValidateCode(String value){
        boolean flag = false;
        if (null != value && !value.trim().equals("")) {
            Pattern pattern = Pattern.compile("^8\\d{5}$");
            Matcher matcher = pattern.matcher(value.trim());
            flag = matcher.matches();
        }
        return flag;
    }

    
    /**
     * 判斷是否全部大寫字母
     * @param str
     * @return
     */
    public static boolean isUpperCase(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        String reg = "^[A-Z]$";
        return isMatch(reg,str);
    }
    
    
    /**
     * 判斷是否全部小寫字母
     * @param str
     * @return
     */
    public static boolean isLowercase(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        String reg = "^[a-z]$";
        return isMatch(reg,str);
    }
    
    
    /**
     * 是否ip地址
     * @param str
     * @return
     */
    public static boolean isIP(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        return isMatch(IP, str);
    }
    
    /**
     * 符合返回true,區分30、31天和閏年的2月份(最嚴格的校驗),格式為2017-10-19
     * @param str
     * @return
     */
    public static boolean isDate(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        return isMatch(DATE_COMPLEX_LEAP_YEAR, str);
    }
    
    
    /**
     * 簡單日期校驗,不那麼嚴格
     * @param str
     * @return
     */
    public static boolean isDateSimple(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        return isMatch(DATE, str);
    }
    
    
    /**
     * 區分30、31天,但沒有區分閏年的2月份
     * @param str
     * @return
     */
    public static boolean isDateComplex(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        return isMatch(DATE_COMPLEX, str);
    }
    
    
    /**
     * 判斷是否為數字字元串,如0011,10101,01
     * @param str
     * @return
     */
    public static boolean isNumberText(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        return isMatch(NUMBER_TEXT, str);
    }
    
    
    /**
     * 判斷所有類型的數字,數字(整數、0、浮點數),可以判斷是否金額,也可以是負數
     * @param str
     * @return
     */
    public static boolean isNumberAll(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        return isMatch(NUMBER_ALL, str);
    }
    
    
    /**
     * 是否為正整數數字,包括0(00,01非數字)
     * @param str
     * @return
     */
    public static boolean isIntegerWithZeroPos(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        return isMatch(INTEGER_WITH_ZERO_POS, str);
    }
    
    
    /**
     * 是否為整數,包括正、負整數,包括0(00,01非數字)
     * @param str
     * @return
     */
    public static boolean isIntegerWithZero(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        return isMatch(NUMBER_WITH_ZERO, str);
    }
    
    
    /**
     * 符合返回true,QQ,5-14位
     * @param str
     * @return
     */
    public static boolean isQQ(String str){
        if(StringUtils.isEmpty(str)){
            return false;
        }
        return isMatch(QQ, str);
    }
    
    
    public static void main(String[] args) {
        System.out.println(isMoblie("13430800244"));
        System.out.println(isMoblie("17730800244"));
        System.out.println(isMoblie("17630800244"));
        System.out.println(isMoblie("14730800244"));
        System.out.println(isMoblie("18330800244"));
        System.out.println(isMoblie("19330800244"));
        System.out.println(isMoblie("1333000244"));
    }
    

}

 

 

(如果你覺得文章對你有幫助,歡迎捐贈,^_^,謝謝!) 

================================

©Copyright 蕃薯耀 2020-01-17

https://www.cnblogs.com/fanshuyao/


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

-Advertisement-
Play Games
更多相關文章
  • 一、字元串相關的常用方法簡介​ package com.bjpowernode.java_learning; ​ public class D74_1_StringCommonMethod { public static void main(String[] args) { //1.轉為大寫 Sys ...
  • import wave r = r"D:\沫沫醬 - 舊傷口.wav" # 一個.wav格式文件 with wave.open(r, "rb") as f: # 讀取文件格式等 params = f.getparams() nchannels, sampwidth, framerate, nfram ...
  • 一、寫在前面 作為一名測試,有時候經常會遇到需要錄屏記錄自己操作,方便後續開發同學定位。以前都是用ScreenToGif來錄屏製作成動態圖,偶爾的機會看到python也能實現。那就趕緊學習下。 二、效果展示 三、知識串講 這次要講的東西可能比較多了,涉及到pyqt5 GUI軟體的製作、QThread ...
  • 學Python的很多,不只是程式員學Python,運營、產品、測試都在學Python 除了互聯網,辦公一族都開始學Python了,學Python的理由千萬條。 因為人生苦短 這句話最初出自《Java 編程思想》作者Bruce Eckel。 有因為Python牛到飛起的 再看看Python鳥怎麼喝水的 ...
  • \ ​ GNE(GeneralNewsExtractor)是一個通用新聞網站正文抽取模塊,輸入一篇新聞網頁的 HTML, 輸出正文內容、標題、作者、發佈時間、正文中的圖片地址和正文所在的標簽源代碼。GNE在提取今日頭條、網易新聞、游民星空、 觀察者網、鳳凰網、騰訊新聞、ReadHub、新浪新聞等數百 ...
  • 收集的Android測試或者開發中常用的aadb命令,可以使用Ctrl+F快速搜索### ADB命令集錦: adb --help //adb幫助 adb start-server //啟動adb server adb kill-server //關閉adb server adb devices // ...
  • Python 3.8 已於前兩周正式發佈,不過目前大多數開發者主要使用的仍是 Python 3.7.x 或更舊的版本。 ! 事實上,立刻切換到使用 Python 3.8 可能會引發一些問題。想知道何時切換至 Python 3.8?下文將簡要概述切換主要的 Python 版本以及進行切換時可能會遇到的 ...
  • 通過以sdk方式編製windows視窗程式,對理解windows消息驅動機制和delphi消息編程有很大的幫助。 sdk編製windows視窗程式的步驟: 1、對TWndClass對象進行賦值; 2、向系統註冊wndclass對象(RegisterClass); 3、CreateWindow創建視窗 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...