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


在參考率網絡上的部分代碼后,寫了一個簡單的轉換方法,原本是想用在抓取電子書中的標題使用的,比如,“第一千三百零二章”轉換成1302

 1 /// <summary>
 2         /// 將中文數字轉換為阿拉伯數字(逐字符分析的方式)
 3         /// </summary>
 4         /// <param name="wText">要轉換的中文數字字符串,如一千二百三十四</param>
 5         /// <returns>成功返回 int 類型數字,遇到不能解析的參數則拋出 ArgumentException 異常</returns>
 6         public int DecodeWordToNumberString(string wText)
 7         {
 8             ///
 9             /// 先替換一下可能的錯字
10             /// 
11             wText = wText.Replace("", "");
12             wText = wText.Replace("", "");
13            //
14             int result = 0;
15             int p = 0;//用於記錄遍歷到字符的位置和保存到 list<int>的個數
16             string numString = "一二三四五六七八九壹貳參肆伍陸柒捌玖兩倆仨";
17             int isNumeric = -1;
18             List<int> numList = new List<int>(5);
19             char[] chars = wText.ToCharArray();
20             //
21             // 逐個字符遍歷
22             // 遇到數字,就保存至 list<int>,遇到“十百千萬”就進行分析,並正確組合之前list<int>的數字
23             try
24             {
25                 for (int i = 0; i < chars.Length; i++)
26                 {
27                     isNumeric = numString.IndexOf(chars[i]);
28                     if (isNumeric > -1)
29                     {
30                         // 如果是數字,list<int> 中添加入一位數字,並將 p 作為指針移動一位
31                         numList.Add(wtonDict[chars[i].ToString()]);
32                         p++;
33                     }
34                     else
35                     {
36                         switch (chars[i].ToString())
37                         {
38 
39                             case "":
40                                 if (i == 0) // i=0說明十在第一個,是 1x 這樣的數字
41                                 {
42                                     numList.Add(10);
43                                     p++;
44                                 }
45                                 else // 如果不是,前面的一個數字要乘以10
46                                 {
47                                     if (chars[i - 1].ToString() == "")// 如果十字的前面是零,按默認一十處理,否則,按常規處理
48                                     {
49                                         numList.Add(10);
50                                         p++;
51                                     }
52                                     else
53                                     {
54                                         numList[p - 1] = numList[p - 1] * 10;
55                                     }
56                                 }
57                                 break;
58                             case "":
59                                 numList[p - 1] = numList[p - 1] * 100;
60                                 break;
61                             case "":
62                                 numList[p - 1] = numList[p - 1] * 1000;
63                                 break;
64                             case "":
65                                 // 萬字比較復雜,說明前面的所有數字都需要擴大 10000 倍
66                                 for (int k = 0; k < numList.Count; k++)
67                                 {
68                                     numList[k] = numList[k] * 10000;
69                                 }
70                                 break;
71                             case "":
72                                 // 零不需要處理
73                                 break;
74                         }
75                     }
76                 }
77                 // 循環處理結束后,將 list<int> 中的所有數字相加就是結果
78                 foreach (int k in numList)
79                 {
80                     result += k;
81                 }
82                 //
83                 return result;
84             }
85             catch (Exception ex)
86             { throw new ArgumentException(); }
87         }

里邊用到了一個 Dictionary<string,int>,是自定義的一個漢字和阿拉伯數字的映射關系

Dictionary<string, int> wtonDict; // 定義一個漢字與數字的映射關系

/// <summary>
        /// 用字典方式創建文字和數字的映射關系
        /// </summary>
        private void InitializeWordToNumberDictionary()
        {
            wtonDict.Add("", 1);
            wtonDict.Add("", 2);
            wtonDict.Add("", 3);
            wtonDict.Add("", 4);
            wtonDict.Add("", 5);
            wtonDict.Add("", 6);
            wtonDict.Add("", 7);
            wtonDict.Add("", 8);
            wtonDict.Add("", 9);
            wtonDict.Add("", 10);
            wtonDict.Add("", 1);
            wtonDict.Add("", 2);
            wtonDict.Add("", 3);
            wtonDict.Add("", 4);
            wtonDict.Add("", 5);
            wtonDict.Add("", 6);
            wtonDict.Add("", 7);
            wtonDict.Add("", 8);
            wtonDict.Add("", 9);
            wtonDict.Add("", 10);
            wtonDict.Add("", 2);
            wtonDict.Add("", 2);
            wtonDict.Add("", 3);
        }

現在可以了,將兩個方法復制到同一個文件內,就可以直接使用了,但因為是根據電子書應用寫的,所以並不適用於所有情況,不如就沒有考慮億的問題,沒有考慮真正的漢字數字比如零點幾幾的問題,這些是不會出現在電子書的標題中的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM