Net学习日记_基础提高_7

字符串是个引用类型,特殊的引用类型。

string 关键字

String str = new String(); =》 简化 string str = "123";

1.字符串可以看成一个字符数组。

2.str.Length表示指定字符串的字符个数。

3.字符串对象一旦创建,这个字符串就不能被修改了。

4.创建1个字符串对象的时候,会先去字符串拘留池中寻找是否有相同字符串内容的对象。如果有就直接让变量指向这个对象,若没有,就创立。

5.如何清理?GC.Collect();字符串一旦创建,不会被GC回收。(其他语言也是这样的哦)

6.字符串的恒定性:以上内容。

Net学习日记_基础提高_7

字符串常用方法

1.构造方法只能传递字符数组。

2.Length属性代表字符的个数

3.string.Empty代表1个空的字符串;“”强调不是指null;

4.string.Compare(s1,s2);比较两字符串的大小。

5.string.Concat(s1,s2);连接两字符串。

6.Contains方法,判断指定的串里面是否包含指定的子串。

7.判断指定的字符串是否已指定的字符结尾    str.EndWith("!");

8.Equals方法,判断指定字符串的内容是不是与指定的串相同

9.Format(String, Object)格式化字符串

string str = string.Format(" 我爱{0},你爱{1}","你","他");

10.IndexOf() 返回字符串的索引。

11.LaseIndexOf();从字符串的结尾往前查,第一次字符串出现的索引。

12.string str2 = Insert(1,str); 在字符串的指定位置插入字符串。

13.IsNullEmpty():是用来判断指定的串是不是null,或者string.Empty;

14.Remove(4):从第4个开始删,保留前面,删除后面

     Remove(1,2):从指定下标删除指定的个数的字符

15.Replace(str,str2);替换。

16.Split(',',';'):通过,号分隔字符串,并且用;号分隔,返回数组。

    也可同字符串分隔

   string[] lines = str3.Split(new string[]{"门上"},StringSplitOptions.RemoveEmptyEntries);

17.Substring(4,3):切割字符串(从第几个开始切,切几个?)

     只传一个,就是将前面的切掉 

18.ToCharArray() :将字符串转换为字符数组

19.ToLower():转换为小写

20.ToUpper():转换为大写

21.Trim():去掉空格

StringBuilder

目的:是为了防止String多次创建类,浪费时间

仅仅是个类,不能被继承

SringBuilder sb = new StringBuilder();用来处理我们String类型的

sb.Append(); 在追加字符串。

特点:StringBuilder对象是可变的。当改变这个对象的字符串时,不会去新开空间,而是直接改变。

StringBuilder高效的字符串操作,大批量进行字符串操作时,使用StringBuilder提升性能。

StringBuilder != String; ToString();

StringBuilder仅仅是拼接字符串的工具,大多数情况下还需要把StringBuilder转换成String;

集合ArrayList(动态数组)

 1.0  新增元素 Add;

 1.1 ArrayList内部储存数据的是1个object数组,创建这个类的对象的时候,这个对象的数组的长度为0;

 1.2 调用Add方法加元素的时候,如果第一次增加元素,就会将数组的长度变成4,往数组里加。

 1.3 如果储存数据的数组满了,就会新建1个数组长度是原来的数组的2被,这个数组被原来数组的变量所引用。

 1.4 AddRange方法,添加1个实现IConnection接口的类的对象,数组就实现这个接口。

 1.5 Capacity表示object数组的长度。

 1.6 list[0] = 110; 修改元素的值,可以通过索引器来取值或者修改值

 1.7 遍历。数组元素的个数 Count(),Count()属性代表是动态数组里的元素的个数。

 1.8.删除。Remove(元素值?);可以删除指定的值类型对象、引用类型对象,删除的是第一个。

                 RemoveAt(index);删除指定下标的元素

                 RemoveRange(1,2);从第1个开始删,删2个

      注意:删除后,后面元素会补上。

                Clear(); 清空动态数组,清空后数组的长度不变。

 1.9 InsertRange() 插入一个数组

ForEach原理

1.如果我们的类要是用foreach,则必须实现IEnumerable这个接口

foreach(int i in list1)

{

 Console.writeLine(i);

}

2.为啥?forEach背后的代码:

IEnumerator tor  = j.GetEnumerator(); //定义在IEnumerable

while(tor.MoveNext())

{

Console.WritleLine(tor.Current);

}

GetEnumerator():这个方法返回1个实现了IEnumerator接口的对象。

3.所以我们要实现IEnumerable这个接口中的GetEnumerator()的话,就要写1个类来实现IEnumerator接口。并在GetEnumerator()方法中返回这个类的实例。

4.IEnumerator接口定义1个Current只读属性,MoveNext方法, Reset方法

5.MoveNext方法的作用,将指针向前移动一位,并判断当前位是否有元素,如果有返回true;没有返回false

6.Current只读属性,得到当前指针指向的值。

7.这两个方法都是操作指针在数组上移动,数组在集合类中。所以想办法将集合类中的数组传递到当前迭代器类中。

8.迭代器对象在集合类中创建,所以可以通过构造函数让集合将他的数组传递给迭代器,这时候迭代器对象中已经有了数组的引用。

9.实现MoveNext方法,声明index变量,用来保存当前指针指向的数组的索引,默认是-1.

   每调用一次这个方法,指针就向前移动一位,所以index++;

   判断数组【index】这个元素是否存在。  index<Count时候就存在。

   所以迭代器对象还需要知道元素的有效个数,通过构造函数传入。

10.实现Current属性,

   直接返回指针指向的数据  return arr[index];

IEnumerator里面有三个抽象类

1.Current(): 返回当前指针指向的元素的值

2.MoveNext():是将指针向前移动1位,并判断当前位有没有元素

3.Reset();

集合Hashtable

table(key,string):键值对

改值要通过key确定。

删除要通过key确定。

Remove(“小明”);

Clear();

遍历

table.Keys 保存了所有键的集合

foreach(object obj in table.Keys)

{

  Console.Writrline(table[obj]);

}

如果直接遍历Hashtable,每一个遍历项都是一个DictionaryEntry对象里的key和Value属性保存了每一个键值

foreach(Object obj in table)

{

  DictionaryEntry en = (DictionaryEntry) obj;

  Console.WriteLine(en.Key);

}

table.Values 保存了所有值的集合。可以直接遍历

table.Contains 是否包含特定的键。

table.ContainsValue是否包含特定的值

Count()哈希表中元素的个数。