1. 程式人生 > >日期轉換 例如 二零零六年十二月二十一日 轉換成 2006年12月21日

日期轉換 例如 二零零六年十二月二十一日 轉換成 2006年12月21日

日期轉換  例如 二零零六年十二月二十一日 轉換成 2006年12月21日

 class Program
    {
        static void Main(string[] args)
        {
            //編寫一個函式進行日期轉換,將輸入的中文日期轉換為阿拉伯數字日期,比如:二零一二年十二月二十一日要轉換為2012-12-21.(處理“十”的問題:1,*月十日;2,*月十三日;3,*月23日;4,*月三十日;)四種情況對“十”的不同翻譯
            Console.WriteLine("請輸入日期");
            string strDate = Console.ReadLine();//讀取使用者輸入的內容
            //string strDate = "二零一二年十二月二十一日";
            string time = ConvertToDate(strDate);
            Console.WriteLine(time);
            Console.ReadKey();
        }

        private static string ConvertToDate(string strDate)
        {

            StringBuilder sb = new StringBuilder();//表示可變字串,次類不能被繼承
            string zidian = "零0 一1 二2 三3 四4 五5 六6 七7 八8 九9";
            //漢字做鍵 數字做值
            Dictionary<char, char> dic = new Dictionary<char, char>();
            string[] txt = zidian.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries );//用空格切割 非常重要
            for(int i = 0; i < txt.Length; i++)//先做字典
            {
                if (!dic.ContainsKey(txt[i][0]))//已經確定 “string zidian = "零0一1二2三3四4五5六6七7八8九9";”沒有重複的
                {
                    dic.Add(txt[i][0], txt[i][1]);//鍵與值均儲存起來
                }
                //txt[i][0]
               
            }
            char[] chs = strDate.ToCharArray();//字串複製到字元陣列
            for(int i = 0; i < chs.Length; i++)
            {
                //先判斷該字元是不是 十
                if (chs[i] == '十')
                {
                    if (!dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))//如果前後都不在字典中
                    {
                        sb.Append("10");
                    }
                    else if(!dic.ContainsKey(chs[i - 1]) && dic.ContainsKey(chs[i + 1]))//如果前面不在,後面再
                    {
                        sb.Append("1");
                    }
                    else if(dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))
                    {
                        sb.Append("0");//Append()向此例項增加制定字串的副本
                    }
                    else//(dic.ContainsKey(chs[i - 1]) && dic.ContainsKey(chs[i + 1])) 前後都在詞典中
                    {
                        //sb.Append();
                      
                    }

                }
                else//不是十   //例如 二零零六年五月三日
                {
                    //如果當前的字元不是十,再判斷該字元在字典中是否存在
                    if (dic.ContainsKey(chs[i]))
                    {
                        sb.Append(dic[chs[i]]);//包含該漢字,就把數值引出來  例如 "六"
                    }
                    else
                    {
                        sb.Append(chs[i]);//如果不存在,是本身 例如“年”
                    }
                }
            }
            return sb.ToString();
    
        }
    }

注意:1)用詞典切割,必須原字串提供可切割的部分,例如string zidian = "零0 一1 二2 三3 四4 五5 六6 七7 八8 九9";可以用空格來切割;

2)先做字典

 for(int i = 0; i < txt.Length; i++)//先做字典
                {
                    if (!dic.ContainsKey(txt[i][0]))//已經確定 “string zidian = "零0一1二2三3四4五5六6七7八8九9";”沒有重複的
                    {
                        dic.Add(txt[i][0], txt[i][1]);//鍵與值均儲存起來
                    }
                    //txt[i][0]
               
                }

3)char[] chs = strDate.ToCharArray();//字串複製到字元陣列  ,再判斷