C# 字符串String相关

是否可以继承String类

不能,因为从定义上看String类是sealed类【密封】故不可以继承。
当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。若硬要写,则编译不通过

字符串字节长度、字符长度

string strTmp = "abcdefg某某某";
int i=System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;

以上代码执行完后,i= j= 
答:i=13,j=10

解释:

一个汉字占两个字节,一个字母占一个字节;

String的Lenght属性表示字符的个数(不分中英文)。

字符串对象

String s = new String("xyz");创建了几个String Object

答:两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s。

空字符串理解

String str1 = null;   str引用为空

String str2 = "";      str引用一个空串

也就是null没有分配内存空间,""分配了内存空间,因此str1还不是一个实例化的对象,而str2已经实例化。

注意:null不是对象,""是对象。所以比较的时候必须是 if(str1==null){...}和if(str2.equals("")){...}。

对象用equals比较,null用等号比较。

因此,如果str1=null;  下面的写法错误: 

if(str1.equals("")||str1==null)
{
//如果str1没有值,则.... 
//。。。。 
} 

正确的写法是:

if(str1==null||str1.equals(""))
{ 
//先判断是不是对象,如果是,再判断是不是空字符串 
//... 
}

打个比方:一个空玻璃杯,你不能说它里面什么都没有,因为里面有空气,当然也可以把它弄成真空,null与" "的区别就象真空与空气一样。

string与stringBuilder

String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。 因为一旦创建了该对象,就不能修改该对象的值。
在处理字符串时,最好使用stringBuilder类,其.NET命名空间是System.Text。该类并不是创建新的对象,而是通过append,remove,insert等方法直接对字符串进行操作,通过toString方法返回操作结果,因此当你需要大量拼接、删除、修改字符串时,使用stringBuilder可以优化性能。 

数字转为百分数字符串(保留小数点后两位)

  • C#代码, Int/double 至少一个不是int型

ToString("0.00%");   或者ToString("p2");

  • JS代码

((a/b)*100).toFixed(2)  + '%'  

判断字符串中汉字

 方法1、用ASCII码判断

//在 ASCII码表中,英文的范围是0-127,而汉字则是大于127,具体代码如下:

string text = "是不是汉字,ABC,柯乐义";
        for (int i = 0; i < text.Length; i++)
        {
            if ((int)text[i] > 127)
            {
                Console.WriteLine("是汉字");
            }
            else
            {
                Console.WriteLine("不是汉字");
            }
        }

方法2、用汉字的 UNICODE 编码范围判断

//汉字的 UNICODE 编码范围是4e00-9fbb,具体代码如下:

string text = "是不是汉字,ABC,keleyi.com";
            char[] c = text.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i] >= 0x4e00 && c[i] <= 0x9fbb)
                {
                    Console.WriteLine("是汉字");
                }
                else
                {
                    Console.WriteLine("不是汉字");
                }
            }

方法3、用正则表达式判断

//用正则表达式判断也是用汉字的 UNICODE 编码范围,具体代码如下:

string text = "是不是汉字,ABC,keleyi.com";
             for (int i = 0; i < text.Length; i++)
             {
                   if (Regex.IsMatch(text[i].ToString(), @"[\u4e00-\u9fbb]+{1}"))
                   {
                       Console.WriteLine("是汉字");
                   }
                   else
                   {
                       Console.WriteLine("不是汉字");
                   }   
             }

 

posted @ 2014-10-22 12:45  peterYong  阅读(250)  评论(0编辑  收藏  举报