字符串,最初在C中是指一个char数组。在.NET和Java,语言本身内置String的类型,String一个不可变得类型,每次修改,都返回新的实例。以下我讨论关于String类型的一些常见用法。
1、判断是否空字符串
//
判断是否为null,或者长度是否为0
if (str == null || str.Length == 0 )
{
//do something
}
if (str == null || str.Length == 0 )
{
//do something
}
//
判断是否为null,并且长度是否为0
if (str != null && str.Length != 0 )
{
//do something
}
if (str != null && str.Length != 0 )
{
//do something
}
String trimedStr;
// 判断是否为null,并且Trim之后长度是否为0
if (str != null && (trimedStr = str.trim()).Length != 0 )
{
//use trimedStr
//do something
}
// 判断是否为null,并且Trim之后长度是否为0
if (str != null && (trimedStr = str.trim()).Length != 0 )
{
//use trimedStr
//do something
}
//
判断是否为null,并且trim之后长度是否为0
if (str != null && str.Trim().Length != 0 )
{
String trimedStr = str.Trim();
//do something
}
if (str != null && str.Trim().Length != 0 )
{
String trimedStr = str.Trim();
//do something
}
2、优化长字符串处理
String一个不可变得类型,每次修改,都返回新的实例。在C#中使用StringBuilder,在Java中使用StringBuffer。
例如:
StringBuilder strBuilder
=
new
StringBuilder();
strBuilder.Append( " aaa " );
strBuilder.Append( " bbb " );
String str = strBuilder.ToString();
strBuilder.Append( " aaa " );
strBuilder.Append( " bbb " );
String str = strBuilder.ToString();
3、重载ToString方法
当你一个大对象,包括很对子对象,需要每个子ToString然后相加,产生一个大字符串,此时你需要重载ToString()方法,但是这样的效率比较低。一种可替代的方式为,你提供一个额外的Output方法。例如:
public
void
Output(StringBuilder strBuilder)
{
//do something
}
public override String ToString()
{
StringBuilder strBuilder = new StringBuilder();
Output(strBuilder);
return strBuilder.ToString();
}
{
//do something
}
public override String ToString()
{
StringBuilder strBuilder = new StringBuilder();
Output(strBuilder);
return strBuilder.ToString();
}
总结
其实这些都是很简单的技巧,理应该每个人都掌握,但是以前参加代码评审时,发现很多人还是犯错了,有个项目某个人使用了一种错误的方式,然后在整个项目组内推广,结果是整个项目组都使用错误了。
每次代码评审都会发现很多可笑的事情 :-)