代码没怎么整理,看起来有点乱,是自己看书时的调试代码,要点都在代码的注释上了,对初学者会很有帮助的。
class days
{
public int Hight, low;
public days(){ }
public days(int ht,int low)
{
this.Hight = ht;
this.low = low;
}
public int Average()
{
return (Hight+low)/2;
}
}
class Person
{
private string Name;
public Person() { }
public Person(string name) { this.Name = name; }
}
static void Main(string[] args)
{
#region days 先执行构造函数,再用对象初始化列表中的值进行覆盖
/*
days days1 = new days(6, 4) { Hight = 10, low = 20 };
//days days1 = new days { Hight = 10, low = 20 };
//days days1 = new days(6, 4) { low = 20 };
//days1.Hight = 50;
//days1.low = 30;
Console.WriteLine("Hight={0},low={1},Average={2}", days1.Hight, days1.low, days1.Average());
Console.ReadLine();
*/
#endregion
#region 相等性比较 引用类型和值类型的不同,数组的特殊性
/*
int inta =3;
int intb =3;
Console.WriteLine(inta == intb);
Console.WriteLine(inta.Equals(intb));
string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
Console.WriteLine(a == b);
Console.WriteLine(a.Equals(b));
object g = a;
object h = b;
Console.WriteLine(g == h);
Console.WriteLine(g.Equals(h));
Person p1 = new Person("jia");
Person p2 = new Person("jia");
Console.WriteLine(p1 == p2);
Console.WriteLine(p1.Equals(p2));
Person p3 = new Person("jia");
Person p4 = p3;
Console.WriteLine(p3 == p4);
Console.WriteLine(p3.Equals(p4));
Console.ReadLine();
*/
#endregion
#region 字符串常见操作
string newline=Environment.NewLine;//系统中的换行符\r\n;
string str = "中国";
int len = str.Length;
Console.WriteLine("字符串\"中国\"的长度是{0}", len);
//Console.ReadLine();
byte[] bytestr = Encoding.Default.GetBytes(str);
len = bytestr.Length;
Console.WriteLine("字符串\"中国\"的byte长度是:"+newline+"{0}", len);
//Console.ReadLine();
StringBuilder sb = new StringBuilder();
sb.Append("你好,");
sb.Append("中国!");
Console.WriteLine("sb是:{0}", sb);
Console.WriteLine("sb的第二个字是:{0}", sb.ToString().Substring(1,1));//把sb转换为字符类型;
// 注意:Console.WriteLine()调用string.format();对类似于{0:00}格式化的说明;
Console.WriteLine(@"对{0:00}应用的说明");
Console.WriteLine("111的格式化字符串是:lsh{0:00}", 111);
Console.WriteLine("11的格式化字符串是:lsh{0:00}", 11);
Console.WriteLine("1的格式化字符串是:lsh{0:00}", 1);
Console.WriteLine("111的格式化字符串是:lsh{0,15}", "111");
Console.WriteLine("11的格式化字符串是:lsh{0,-15}", "11");
Console.WriteLine("1的格式化字符串是:lsh{0,15}", "1");
string sabc = "321234567890";
Console.WriteLine("|{0,10}|", "abc123");
Console.WriteLine("|{0,-10}|", "abc123");
Console.WriteLine("|{0,10}|", "ab12");
Console.WriteLine("|{0,-10}|", "ab12");
double avalue = 321234567890;
//string avs= avalue.ToString("#") + "\n";
// Displays 1234567890
string strFT = "#(###) ###-####";
string avsft = avalue.ToString(strFT);//输出:(32123) 456-7890
Console.WriteLine("1234567890是:{0}", avsft);
int avalueint = 12345678;
Console.WriteLine("12345678用n格式化是:{0:N}", avalueint);
//string stringFTR = string.Format("|{0:#(###) ###-####}|", avalue);
string stringFTR = string.Format("|{0,22:#(###) ###-####}|", avalue);
string stringFTR0 = string.Format("|{0,22:0(000) 000-0000}|", avalue);
//string stringFTR0 = string.Format("|{0,22:0(000) 000-0000}|", avalue);
string stringFTL = string.Format("|{0,-2}|", avalue);
Console.WriteLine("stringFTR:{0}", stringFTR);
Console.WriteLine("stringFTR:{0}", stringFTR0);
Console.WriteLine("stringFTL:{0}", stringFTL);
char ISP = char.Parse(strFT.Substring(1, 1));//转换为char类型
Console.WriteLine("A:{0}", char.IsPunctuation(ISP));//判断是否为标点
//中文字符与整形数值的转换
int zhong=(int)'中';
Console.WriteLine("中转换为int:{0}", zhong);
char tozhong = (char)20013;
Console.WriteLine("20013可以转换为中文:{0}", tozhong);
//Trim(),TrimEnd()的用法;理解的关键:最后生成的字符串不以字符数组中的字符结尾(or/and)开始,而不管原字符串以几个字符数组中的字符结尾;
string strSPC = " 中 国 的 的 国,铁";
char[] delchar = { '的', ' ', '国' };//
string str_spc = strSPC.TrimEnd(' ').TrimEnd('国').TrimEnd(' '); //去掉右边的空格,注意是',不是"
//string str_spc = strSPC.TrimEnd(delchar);
//string str_spc = strSPC.Trim(delchar);//
//string str_spc = strSPC.Trim();//去掉两边的空格
//string str_spc = strSPC.Replace(" ", "");//去掉所有的空格
Console.WriteLine("{0}去掉空格后是:{1}", strSPC, "1"+str_spc + "1");
//split()的用法,
string strSPC2 = " 1 2 3 4 5,,6aaa7 js8,9 js";//当有连续的空格时,空格也会存入数组,这很可能不是期望的结果;
string[] strspt = strSPC2.Trim().Split(' ', ',');//推荐的写法,用空格和逗号作为分割符,
//以下是一些其它的写法,区别主要在字符数组的构建上.
//string[] strspt = strSPC2.Trim().Split(new char[]{' ', ','});//匿名数组?
//string[] strspt = strSPC2.Trim().Split(' ');//只用空格作为分割符,最后的字符串是"5,6"
//char[] sptchar = { ' ', ',' };
//char[] sptchar =new char[] { ' ', ',' };
//string[] strspt = strSPC2.Trim().Split(sptchar);
foreach (string item in strspt)
{
Console.WriteLine("strspt中的字符依次是:{0}", item);
}
Console.WriteLine("--------------------------------------------");
Console.WriteLine("正则表达式分割字符串,也可以直接用它获取需要的部分");
Console.WriteLine("--------------------------------------------");
string[] words = Regex.Split(strSPC2.Trim(), @"[ ]+|[,]+|[js]|[a]+");//Trim()去掉两端的空格,不然---;用连续的空格和逗号作为分割符;" js"处出错
foreach (string item in words)
{
Console.WriteLine("strspt中的字符依次是:{0}", item);
}
//解决" js"处出错的思路,第一种情况:js在开头或结尾时,要去掉js,但是不好操作,可以先把js替换成",",然后用trim();第二种情况:形如" "和"js"相连时,都替换成",",然后用"[,]+"分割;综合以上两种情况,就是替换>trim>split;
//代码实现:strSPC2 = " 1 2 3 4 5,,6aaa7 js8,9 js"
Console.WriteLine("---------------------对 js的处理--------------------------------");
Regex regex = new Regex("[ ]+|[,]+|[js]|[a]+");
string regstr = regex.Replace(strSPC2, ",");
//words = Regex.Split(regstr.Trim(','), ",");//Trim()去掉两端的空格,不然---;用连续的空格和逗号作为分割符;" js"处出错
words = Regex.Split(regstr.Trim(','), @"[,]+");//在此处@可以省略
foreach (string item in words)
{
Console.WriteLine("strspt中的字符依次是:{0}", item);
}
Console.ReadLine();
#region 直接用正则表达式从字符串中提取数字
//Console.WriteLine("---------------------直接用正则表达式从字符串中提取数字------------------");
//string strSP4 = " 1 2 3 4 5,,6aaa7 js8,9 js";
//Regex reg4 = new Regex(@"\d+",RegexOptions.IgnoreCase);
//MatchCollection MCS = reg4.Matches(strSP4);
//foreach (Match item in MCS)
//{
// Console.WriteLine("匹配的项:"+item);
//}
#endregion
#region 正则表达式 示例
/*
//要匹配的字符串
string text = "1A5M16N 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080";
//正则表达式
//string pattern = @"((\d+)([a-z]))\s+";
//string pattern = @"((\d+)(\S+)([a-z]+))";
string pattern = @"((\d+)([a-z]+))+";
//使用RegexOptions.IgnoreCase枚举值表示不区分大小写
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
//使用正则表达式匹配字符串,返回所有的匹配结果
MatchCollection matchCollection = r.Matches(text);
foreach (Match m in matchCollection)
{
//显示匹配开始处的索引值和匹配到的值
System.Console.WriteLine("Match=[" + m + "]");//m就是我们期望的值,注意:贪婪匹配
//CaptureCollection cc = m.Captures;
//foreach (Capture c in cc)
//{
// Console.WriteLine("\tCapture=[" + c + "]");
//}
//for (int i = 0; i < m.Groups.Count; i++)
//{
// Group group = m.Groups[i];
// System.Console.WriteLine("\t\tGroups[{0}]=[{1}]", i, group);
// for (int j = 0; j < group.Captures.Count; j++)
// {
// Capture capture = group.Captures[j];
// Console.WriteLine("\t\t\tCaptures[{0}]=[{1}]", j, capture);
// }
//}
}
*/
#endregion
#region 整形向字符类型的
//int ii = 5;
//string stt = ii + "sss";
//Console.WriteLine("int+string={0}", stt);
//Console.ReadLine();
*/
#endregion
#endregion
#region StringBuilder的用法
/*
StringBuilder sb = new StringBuilder();
Console.WriteLine(sb.Capacity + "\t" + sb.Length + "\t" + sb);
sb.Append('a', 17);
Console.WriteLine(sb.Capacity + "\t" + sb.Length + "\t" + sb);
sb.Append('a', 118);//46,47,48,78,98
Console.WriteLine(sb.Capacity + "\t" + sb.Length + "\t" + sb);
Console.ReadLine();
*/
#endregion