日期转换 例如 二零零六年十二月二十一日 转换成 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();//字符串复制到字符数组 ,再判断