1. 程式人生 > >將字串中的中文數字轉換成阿拉伯數字

將字串中的中文數字轉換成阿拉伯數字

1、正則表示式的處理工具類

public class RexUtils {
       public static String and(String... rules) {
        StringBuffer sb = new StringBuffer();
        for (String rule : rules) {
            sb.append("(").append(rule).append(")");
}
        return sb.toString();
}

    public static String or(String... rules) {
        StringBuffer sb = new 
StringBuffer(); for (String rule : rules) { if (sb.length() != 0) { sb.append("|"); } sb.append("(").append(rule).append(")"); } return sb.toString(); } public static String more(String rule) { StringBuffer sb = new StringBuffer();
sb.append("[").append(rule).append("]+"); return sb.toString(); } public static String nullOrMore(String rule) { StringBuffer sb = new StringBuffer(); sb.append("[").append(rule).append("]*"); return sb.toString(); } public static String getFind(String data, String rule) { Matcher m = Pattern.compile
(rule).matcher(data); StringBuffer sb = new StringBuffer(); while (m.find()) { sb.append(String.valueOf(m.group())); return sb.toString(); } return ""; } }
2、使用ChineseNumberUtil呼叫方法獲取阿拉伯數字
/**
 * 從字串中獲取中文數字並轉換為阿拉伯數字
 * Created by huomengyuan on 2017/4/14.
 */
public class ChineseNumberUtil {
    /**
     * @param value 需要轉換的字串
     * @return
*/
public static long getNumbers(String value) {
        value = value.replace("零", "");
ChineseNumber1x chineseNumber1x = new ChineseNumber1x(value);
ChineseNumber10000 chineseNumber10000 = new ChineseNumber10000(value = value.replace(chineseNumber1x.getData(), ""));
ChineseNumber1000 chineseNumber1000 = new ChineseNumber1000(value = value.replace(chineseNumber10000.getData(), ""));
ChineseNumber100 chineseNumber100 = new ChineseNumber100(value = value.replace(chineseNumber1000.getData(), ""));
ChineseNumber10 chineseNumber10 = new ChineseNumber10(value = value.replace(chineseNumber100.getData(), ""));
ChineseNumber1 chineseNumber1 = new ChineseNumber1(value.replace(chineseNumber10.getData(), ""));
        long number1x = chineseNumber1x.getNumber();
        long number10000 = chineseNumber10000.getNumber();
        long number1000 = chineseNumber1000.getNumber();
        long number100 = chineseNumber100.getNumber();
        long number10 = chineseNumber10.getNumber();
        long number1 = chineseNumber1.getNumber();
        long total = number1 + number10 + number100 + number1000 + number10000 + number1x;
        return total;
}
}
3、輔助類:

1>1>1>1>1>

/**
 * 處理個位數
 * Created by huomengyuan on 2017/4/14.
 */
public class ChineseNumber1 {
    public final static String number0 = "零";
    public final static String number1 = "一|壹";
    public final static String number2 = "二|兩|貳|貳";
    public final static String number3 = "叄|參|三";
    public final static String number4 = "肆|四";
    public final static String number5 = "五|伍";
    public final static String number6 = "陸|陸|六";
    public final static String number7 = "柒|七";
    public final static String number8 = "捌|八";
    public final static String number9 = "九|玖";
    private long number = 0;
    public ChineseNumber1() {

    }

    public ChineseNumber1(String data) {
        if (TextUtils.isEmpty(data)) {
            return;
}
        if (!TextUtils.isEmpty(RexUtils.getFind(data, number0))) {
            number = 0;
} else if (!TextUtils.isEmpty(RexUtils.getFind(data, number1))) {
            number = 1;
} else if (!TextUtils.isEmpty(RexUtils.getFind(data, number2))) {
            number = 2;
} else if (!TextUtils.isEmpty(RexUtils.getFind(data, number3))) {
            number = 3;
} else if (!TextUtils.isEmpty(RexUtils.getFind(data, number4))) {
            number = 4;
} else if (!TextUtils.isEmpty(RexUtils.getFind(data, number5))) {
            number = 5;
} else if (!TextUtils.isEmpty(RexUtils.getFind(data, number6))) {
            number = 6;
} else if (!TextUtils.isEmpty(RexUtils.getFind(data, number7))) {
            number = 7;
} else if (!TextUtils.isEmpty(RexUtils.getFind(data, number8))) {
            number = 8;
} else if (!TextUtils.isEmpty(RexUtils.getFind(data, number9))) {
            number = 9;
}
    }

    public long getNumber() {
        return number;
}
}

2>2>2>

/**
 * 處理十位數
 * Created by huomengyuan on 2017/4/14.
 */
public class ChineseNumber10 {
    public final static String number10 = "十|拾";
    private final long unit = 10;
    private final String rex = RexUtils.and(RexUtils.nullOrMore(RexUtils.or("", ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3,
ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9)),
number10);
    private ChineseNumber1 number = new ChineseNumber1();
    private String mData = "";
    public ChineseNumber10(String data) {
        mData = RexUtils.getFind(data, rex);
        if (!TextUtils.isEmpty(mData)) {
            String numberData = String.valueOf(mData.subSequence(0, mData.length() - 1));
            if (TextUtils.isEmpty(numberData)) {
                numberData = "一";
}
            number = new ChineseNumber1(numberData);
}
    }

    public ChineseNumber10() {
        number = new ChineseNumber1();
}

    public long getNumber() {
        return number.getNumber() * unit;
}

    public String getData() {
        return mData;
}
}
3>3>3>
/**
 * 處理百位數
 * Created by huomengyuan on 2017/4/14.
 */
public class ChineseNumber100 {
    public final static String number100 = "佰|百";
    private final long unit = 100;
    private final String rex = RexUtils.and(RexUtils.more(RexUtils.or(ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3,
ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9,
ChineseNumber10.number10)), number100);
    private ChineseNumber1 number = new ChineseNumber1();
    private String mData = "";
    public ChineseNumber100(String data) {
        mData = RexUtils.getFind(data, rex);
        if (!TextUtils.isEmpty(mData)) {
            number = new ChineseNumber1(String.valueOf(mData.subSequence(0, mData.length() - 1)));
}
    }

    public ChineseNumber100() {
        number = new ChineseNumber1();
}

    public long getNumber() {
        return number.getNumber() * unit;
}

    public String getData() {
        return mData;
}
}
4>4>4>
/**
 * 處理千位數
 * Created by huomengyuan on 2017/4/14.
 */
public class ChineseNumber1000 {
    private final long unit = 1000;
    public final static String number1000 = "千|仟";
    private final String rex = RexUtils.and(RexUtils.more(RexUtils.or(ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3,
ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9,
ChineseNumber10.number10, ChineseNumber100.number100)), number1000);
    private ChineseNumber1 number = new ChineseNumber1();
    private String mData = "";
    public ChineseNumber1000(String data) {
        mData = RexUtils.getFind(data, rex);
        if (!TextUtils.isEmpty(mData)) {
            number = new ChineseNumber1(String.valueOf(mData.subSequence(0, mData.length() - 1)));
}
    }

    public ChineseNumber1000() {
        number = new ChineseNumber1();
}

    public long getNumber() {
        return number.getNumber() * unit;
}

    public String getData() {
        return mData;
}
}
5>5>5>
/**
 * 處理萬位數
 * Created by huomengyuan on 2017/4/14.
 */
public class ChineseNumber10000 {
    private final long unit = 10000;
    public final static String number10000 = "萬|萬";
    private final String rex = RexUtils.and(RexUtils.more(RexUtils.or(ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3,
ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9,
ChineseNumber10.number10, ChineseNumber100.number100, ChineseNumber1000.number1000)), number10000);
    private ChineseNumber1000 number1000 = new ChineseNumber1000();
    private ChineseNumber100 number100 = new ChineseNumber100();
    private ChineseNumber10 number10 = new ChineseNumber10();
    private ChineseNumber1 number1 = new ChineseNumber1();
    private String mData = "";
    public ChineseNumber10000() {
        number1000 = new ChineseNumber1000();
number100 = new ChineseNumber100();
number10 = new ChineseNumber10();
number1 = new ChineseNumber1();
}

    public ChineseNumber10000(String data) {
        mData = RexUtils.getFind(data, rex);
        if (!TextUtils.isEmpty(mData)) {
            String numberData = String.valueOf(mData.subSequence(0, mData.length() - 1));
number1000 = new ChineseNumber1000(numberData);
number100 = new ChineseNumber100(numberData = numberData.replace(number1000.getData(), ""));
number10 = new ChineseNumber10(numberData = numberData.replace(number100.getData(), ""));
number1 = new ChineseNumber1(numberData.replace(number10.getData(), ""));
}
    }

    public long getNumber() {
        long number = number1000.getNumber() + number100.getNumber() + number10.getNumber() + number1.getNumber();
        return number * unit;
}

    public String getData() {
        return mData;
}
}
6>6>6>
/**
 * 處理億位數
 * Created by huomengyuan on 2017/4/14.
 */
public class ChineseNumber1x {
    public final static String number1x = "億|億";
    private final long unit = 100000000;
    private final String rex = RexUtils.and(RexUtils.more(RexUtils.or(ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3,
ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9,
ChineseNumber10.number10, ChineseNumber100.number100, ChineseNumber1000.number1000, ChineseNumber10000.number10000)), number1x);
    private ChineseNumber10000 number10000 = new ChineseNumber10000();
    private ChineseNumber1000 number1000 = new ChineseNumber1000();
    private ChineseNumber100 number100 = new ChineseNumber100();
    private ChineseNumber10 number10 = new ChineseNumber10();
    private ChineseNumber1 number1 = new ChineseNumber1();
    private String mData = "";
    public ChineseNumber1x(String data) {
        mData = RexUtils.getFind(data, rex);
        if (!TextUtils.isEmpty(mData)) {
            String numberData = String.valueOf(mData.subSequence(0, mData.length() - 1));
number10000 = new ChineseNumber10000(numberData);
number1000 = new ChineseNumber1000(numberData = numberData.replace(number10000.getData(), ""));
number100 = new ChineseNumber100(numberData = numberData.replace(number1000.getData(), ""));
number10 = new ChineseNumber10(numberData = numberData.replace(number100.getData(), ""));
number1 = new ChineseNumber1(numberData.replace(number10.getData(), ""));
}
    }

    public long getNumber() {
        long number = number10000.getNumber() + number1000.getNumber() + number100.getNumber() + number10.getNumber() + number1.getNumber();
        return number * unit;
}

    public String getData() {
        return mData;
}
}

相關推薦

字串中文數字轉換阿拉伯數字

1、正則表示式的處理工具類 public class RexUtils { public static String and(String... rules) { St

漢字數字字符串轉換阿拉伯數字

weight class har spa 數字 null 轉換 bold blog 1 declare 2 3 str_mid varchar2(100); 4 str_end varchar2(100); 5 begin 6 7 for j in

Pythonlist的unicode轉換中文顯示

有這樣一個列表: list = [{'channel_id': -3, 'name': u'\u7ea2\u5fc3\u5146\u8d6b'}, {u'seq_id': 0, u'name_en':

【C++】羅馬數字轉換阿拉伯數字

題目:Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 將羅馬數字轉換成阿拉伯數字。 方法

java 字串含有unicode 轉中文

private static String ascii2native ( String asciicode )     {         String[] asciis = asciicode.split ("\\\\u");         String nativeV

羅馬數字轉換阿拉伯數字

// 1. 可以同時處理最簡和非最簡的羅馬數字 // 2. 不處理加橫線擴大1000倍的情況,也就是最大隻處理"M" // 3. 不作合法性檢查,如"L"不能出現在"C"前面 int Digit(char c) { if (c == 'I') {

如何圖片的文字轉換Word文檔,99%的人不知道的方法!

簡單 出圖 行編輯 屬性 ocr識別 enter 簡單的 text 光學 最近很多人都在問,如果將資料保存為圖片格式後還能變成word文字麽?其實這是可以的,而且方法也是非常簡單的,下面就一起來看看是怎麽轉換的吧! 不知道大家有沒有聽說過OCR光學技術,其實這是一種識別技術

【演算法】字串的空格替換指定字串

題目: 字串中的空格替換成指定字串,如%20。 給定一個字串,內部有空格,請用最少的時間複雜度、空間複雜度,將空格替換為%20 示例: 輸入: This is a test string 輸出: This%20is%20a%20test%20%string 思路: 只建立

怎樣手機的錄音轉換文字

新聞 cee 語音 現在 一個 process 識別 轉換 同時 像記者、新聞采訪者、很多時候都會把訪問的內容先錄下來,然後結束後在慢慢整理,以前很多人是用錄音筆記錄,然後在一遍一遍的聽,這個解決問題的一種辦法,但是現在隨著科技的發展,已經有很多的錄音工具可以直接將錄音文件

如何字串格式的物件轉換真正的js物件?

1.如何將字串格式的物件轉換成真正的js物件? <script>//eval 的作用eval('var a = 100');console.log(a);</script>   2.寫法 //需要將物件格式的字串轉換成json eval("va

redis的json轉換物件

JSONArray parse = (JSONArray) JSONObject.parse(ogj); List seckills = parse.toJavaList(Seckill.class); 將json轉成list物件 JSONObject.toJa

中文表示的數字阿拉伯數字

問題描述: 輸入一箇中文字串,使用中文表示的數字形式。如一百,一千萬,四千二百萬零三十。 輸出對應的數字,如100,1000000,42000030。 思路: 遇到這個問題一開始覺得挺簡單的,用一個字串和一個數組對應下標就找到數字

字串的字元替換指定字元c

C 全部替換字串裡某個字元或者某個子串 /*將字串中某個字元全部替換為另一個字元*/  #include<stdio.h>  #include<stdlib.h>  #include<string.h>  intsubstitude(ch

oracle改進之阿拉伯數字轉換中文數字

replace 工作 漢字 spa bsp func ace 延展 char   本博客是自己在學習和工作途中的積累與總結。 將阿拉伯數字轉換成中文漢字,方法自定義函數      create or replace function formate(val in num

阿拉伯數字轉換中文的php函數

ont enum pre == tin 函數 array light blog function toChinaseNum($num){ $char = array("零","一","二","三","四","五","六","七","八","九"); $dw

完成 toChineseNum, 可以數字轉換中文大寫的表示,處理到萬級別,例如 toChineseNum(12345),返回 一萬二千三百四十五

turn nts math while log 處理 [0 floor rip const toChineseNum = (num) => { const unit = [‘‘, ‘十‘, ‘百‘, ‘千‘] const counts = [‘零

知識網路1.5 字串的小寫字母轉換大寫

以下是本節涉及的知識點: 將字串小寫字母轉成大寫 字元陣列 從鍵盤輸入字串 char型資料的特點 庫函式 我們終於來到了這一系列boss中最後的boss了。雖然是最後一個,但卻比前面的都要簡單,因為這裡面沒有複雜的多重迴圈,沒有燒腦的找規律,有的只是簡單平和

阿拉伯數字轉換中文大寫數字

function UpGB(InData:real):string; var a1,a2,a3,a4,a5,a6,a7:real; begin   a1 := int(InData/10000);   a2 := int((InData-a1*10000)/1000);  

字串漢字和數字轉換拼音

var transliteration =require(‘transliteration’); ToPin('你好123'); 程式碼: function ToPin(str){ var array =[]; var newstr =""; for(var i