这几天的.NET的基础加强,主要是学习了集合,字符串,以及文件的操作:
字符串:具有不可变性,一旦一个字符串被声明了那么就不能再改变了,所谓的改变字符串,是将一个已声明的字符串先转换为字节数组,然后改变数组中的指定的一个元素后,再重新转换为一个新的 字符串。而原有的字符串在内存中还是存在的。
在字符串的不断的拼接中使用StringBuilder 的Append方法进行拼接,效率是很高的。
字符串练习:汉字时间转为阿拉伯数字时间
1.在Main方法中:
//先定义一个汉字和阿拉伯数字之间的字典集合
Dictionary<string, string> dic = new Dictionary<string, string>(); //键存储汉字日期,值存储对应的阿拉伯数字
string[] temp = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
//通过一个循环给集合添加数据
for (int i = 0; i <= 10; i++)
{
dic.Add(temp[i], i.ToString());
}
//提示用户输入,然后进行转换 ,返回一个数字字符串的结果给用户
while (true)
{
Console.WriteLine("请输入一个汉表示的日期:");
string date = Console.ReadLine();
//按照年月日进行分割
string[] dateTemp = date.Split(new char[] { '年', '月', '日' }, StringSplitOptions.RemoveEmptyEntries);
//string strNewDate = 方法(date, dic);
string year = GetYearDate(dateTemp[0], dic);
string month = GetMonthOrDay(dateTemp[1], dic);
string day = GetMonthOrDay(dateTemp[2], dic);
Console.WriteLine("你输入的日期是:{0}", date);
Console.WriteLine("转换后的结果是:{0}-{1}-{2}", year, month, day);
Console.ReadKey();
//2.定义一个转换年份的方法:
/// 将汉字的年份转换为数字的 年份
/// </summary>
/// <param name="str"></param>
/// <param name="dic"></param>
/// <returns></returns>
private static string GetYearDate(string str, Dictionary<string, string> dic)
{
//声明一个StringBuilder
StringBuilder sb = new StringBuilder();
//遍历字符串中的每个元素,然后和字典集合进行比对,如果有就替换,
for (int i = 0; i < str.Length; i++)
{
//然后将集合中的值取出追加到sb中
sb.Append(dic[str[i].ToString()]);
}
return sb.ToString();
}
//3.定义一个处理月份,日期的方法,这个方法处理十,之后 需要调用处理年份的方法:
//将汉字的月日转换为数字
// 十月十日 -->10 十一 ;二十二; 二十;
/// <summary>
/// 根据字符串和字典集合,进行月份和日期的处理
/// </summary>
/// <param name="str">要转换处理的字符串</param>
/// <param name="dic">存储汉字数字的集合</param>
/// <returns></returns>
private static string GetMonthOrDay(string str, Dictionary<string, string> dic)
{
// StringBuilder sbx = new StringBuilder();
string res = "";
//根据字符串中"十"的位置来进行判断:
if (!str.Contains("十"))
{
res = "0" + GetYearDate(str, dic);
}
else
{
switch (str.Length)
{
case 1:
//如果字符串的长度为1
if (str[0] == '十')
{
res = "10";
}
break;
case 2:
if (str[0] == '十')
{
res = "1" + GetYearDate(str[1].ToString(), dic);
}
else if (str[1] == '十')
{
res = GetYearDate(str[0].ToString(), dic) + "0";
}
break;
case 3:
if (str[1] == '十')
{
res = GetYearDate(str[0].ToString(), dic) + GetYearDate(str[2].ToString(), dic);
}
break;
}//switch_end
}
return res;
}