黑马程序员_学习日记38_602基础加强(string、StringBuilder、Object.ReferenceEquals)
2012-06-04 00:06
525 查看
重写不能修改方法的访问修饰符
常用类库
1、string
l 字符串的特性:
(1)不可变性
(2)字符串池(针对字符串常量):当程序中有多个相同的字符串常量时,这时,它们在内存中共享同一块地址
string s1 = “Hello”;
string s2 = “Hello”;
则有&s1 = &s2
(3)字符串留用(针对字符串变量)
string s1 = “a”;
string s2 = “b”;
string s3 = “c”;
string x1 = “a”;
string x2 = “bc”;
string s4 =
string.Intern(s1+s2+s3);
string s5 =
string.IsInterned(x1+x2);
则 s4与s5堆地址相同
l 如何“修改字符串的值”:ToCharArray()
string msg = “abcdefg”;
char[] ch = msg.ToCharArray();
for(int i= 0;i<ch.Length();i++)
{
ch[i] = (char)(ch[i]+1);
}
Console.WriteLine(new string(ch));
l Length
指的是字符串中字符的个数,不是字节数。
IsNullOrEmpty
判断字符串是否为null或“”(空字符串)
null没有分配空间,“”分配空间不赋值。””和String.Empty是一个概念
判断字符串为空可以用msg==””,也可以用msg.Length()==0
Equals() 比较两个字符串是否相同
调用“==”判断字符串是否相同,其实内部也是调用了Equals方法
IndexOf() 在整个字符串中找子字符串(字符)第一次出现的位置,找不到返回 -1
IndexOf(“天安门”,10)
从第十个字符开始找
LastIndexOf()
从后找子串
Substring() 截取字符串
Split()
(1) 字符串作分隔符
string teams = “公牛NBA小牛NBANBANBANBA快船NBA开拓者|湖人-火箭”;
string[]teamName = teams.Split(new string[] {“NBA”} , StringSplitOption.None);
(2) 去除分割后的空实体
string[] teamName = teams.Split(new string[] {“NBA”} ,StringSplitOption.RemoveEmptyEntries);
(3)
字符串数组分隔符
string[] teamName = teams.Split(new string[]{“NBA”,”|”,”-”} ,StringSplitOptions.RemoveEmptyEntries);
Join() 把字符串数组中的每个元素用指定连接符连接,得到一个完整的字符串
stringfullName = string.Join(“★”,teamName);
Format() 拼接字符串,将拼接完的字符串返回
Trim()
Replace() 替换(可以链式编程)
msg= msg.Replace(“毛主席”,”敏感词”).Replace(“共产党”,”敏感词”);
对字符串操作要用变量接收返回值,因为字符串的不可变性。
2、StringBuilder
大量拼接字符串用StringBuilder
在进行大量字符串拼接的时候,string的问题:
(1) 内存浪费
(2) 由于String的不可变性,每次拼接都会创建一个新的string对象,耗时耗资源
通过StringBuilder拼接的字符串一般都会再转换为string
3、 什么才叫同一个对象?
堆地址相同的对象是同一个对象。不能用p3.Equals(p4)或p3==p4判断是否同一个对象,用Object.ReferenceEquals()
由于string类型重写了从Object继承下来的Equals方法,只要两个字符串中的字符完全相同就返回true或者两字符串是同一对象也返回true。所以判断两个对象是否为同一个对象不能用Equals,可以用Object.ReferenceEquals()
作业:1、动态截取某某某,获取[第一次出现的索引位置N1,获取]第一次出现的索引位置N2,相减
2、 两个值类型用ReferenceEquls返回的是不是都是false
常用类库
1、string
l 字符串的特性:
(1)不可变性
(2)字符串池(针对字符串常量):当程序中有多个相同的字符串常量时,这时,它们在内存中共享同一块地址
string s1 = “Hello”;
string s2 = “Hello”;
则有&s1 = &s2
(3)字符串留用(针对字符串变量)
string s1 = “a”;
string s2 = “b”;
string s3 = “c”;
string x1 = “a”;
string x2 = “bc”;
string s4 =
string.Intern(s1+s2+s3);
string s5 =
string.IsInterned(x1+x2);
则 s4与s5堆地址相同
l 如何“修改字符串的值”:ToCharArray()
string msg = “abcdefg”;
char[] ch = msg.ToCharArray();
for(int i= 0;i<ch.Length();i++)
{
ch[i] = (char)(ch[i]+1);
}
Console.WriteLine(new string(ch));
l Length
指的是字符串中字符的个数,不是字节数。
IsNullOrEmpty
判断字符串是否为null或“”(空字符串)
null没有分配空间,“”分配空间不赋值。””和String.Empty是一个概念
判断字符串为空可以用msg==””,也可以用msg.Length()==0
Equals() 比较两个字符串是否相同
调用“==”判断字符串是否相同,其实内部也是调用了Equals方法
IndexOf() 在整个字符串中找子字符串(字符)第一次出现的位置,找不到返回 -1
IndexOf(“天安门”,10)
从第十个字符开始找
LastIndexOf()
从后找子串
Substring() 截取字符串
Split()
(1) 字符串作分隔符
string teams = “公牛NBA小牛NBANBANBANBA快船NBA开拓者|湖人-火箭”;
string[]teamName = teams.Split(new string[] {“NBA”} , StringSplitOption.None);
(2) 去除分割后的空实体
string[] teamName = teams.Split(new string[] {“NBA”} ,StringSplitOption.RemoveEmptyEntries);
(3)
字符串数组分隔符
string[] teamName = teams.Split(new string[]{“NBA”,”|”,”-”} ,StringSplitOptions.RemoveEmptyEntries);
Join() 把字符串数组中的每个元素用指定连接符连接,得到一个完整的字符串
stringfullName = string.Join(“★”,teamName);
Format() 拼接字符串,将拼接完的字符串返回
Trim()
Replace() 替换(可以链式编程)
msg= msg.Replace(“毛主席”,”敏感词”).Replace(“共产党”,”敏感词”);
对字符串操作要用变量接收返回值,因为字符串的不可变性。
2、StringBuilder
大量拼接字符串用StringBuilder
在进行大量字符串拼接的时候,string的问题:
(1) 内存浪费
(2) 由于String的不可变性,每次拼接都会创建一个新的string对象,耗时耗资源
通过StringBuilder拼接的字符串一般都会再转换为string
3、 什么才叫同一个对象?
堆地址相同的对象是同一个对象。不能用p3.Equals(p4)或p3==p4判断是否同一个对象,用Object.ReferenceEquals()
由于string类型重写了从Object继承下来的Equals方法,只要两个字符串中的字符完全相同就返回true或者两字符串是同一对象也返回true。所以判断两个对象是否为同一个对象不能用Equals,可以用Object.ReferenceEquals()
作业:1、动态截取某某某,获取[第一次出现的索引位置N1,获取]第一次出现的索引位置N2,相减
2、 两个值类型用ReferenceEquls返回的是不是都是false
相关文章推荐
- 黑马程序员——基础学习(八)API中Object、Scanner以及String的用法概述
- 黑马程序员_学习日记36_531基础加强(抽象类、接口实现多态)
- 黑马程序员_学习日记39_604基础加强(垃圾回收、弱引用、集合ArrayList和Hashtable、泛型集合List和Dictionary、var)
- 黑马程序员_学习日记40_605基础加强(自定义泛型、装拆箱、foreach、文件操作、字符串与byte数组转换)
- 黑马程序员Java基础加强1-8学习日记
- 黑马程序员_学习日记44_611基础加强(扩展方法、XML、深拷贝浅拷贝、特性)
- 黑马程序员_学习日记23_C#基础知识补充(StringBuilder、ArrayList、HashTable)
- 黑马程序员_学习日记十五_基础加强之反射
- 黑马程序员_学习日记37_601基础加强(enums_truct_类型转换_值类型与引用类型_异常处理_函数返回值)
- 黑马程序员_学习日记十四_基础加强之JDK1.5的新特性
- 黑马程序员————学习日记【18】 【基础加强2】
- 黑马程序员_学习日记42_608基础加强(正则表达式、委托、匿名方法)
- 黑马程序员————学习日记【19】 【基础加强3】
- 黑马程序员_学习日记十六_基础加强之泛型、类加载器
- 黑马程序员_学习日记43_609基础加强(多播委托、事件、程序集、反射)
- 黑马程序员————学习日记【17】 【基础加强1】
- 黑马程序员--【学习日记九】——基础加强
- 黑马程序员Java基础加强33-40学习日记
- 黑马程序员Java基础加强41-48学习日记
- 黑马程序员Java基础加强9-16学习日记