日期轉換 例如 二零零六年十二月二十一日 轉換成 2006年12月21日
阿新 • • 發佈:2019-02-15
日期轉換 例如 二零零六年十二月二十一日 轉換成 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();//字串複製到字元陣列 ,再判斷