zoukankan      html  css  js  c++  java
  • 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("不是汉字");
                }
            }
    View Code

    方法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("不是汉字");
                    }
                }
    View Code

    方法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("不是汉字");
                       }   
                 }
    View Code

     

  • 相关阅读:
    172. Factorial Trailing Zeroes
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    91. Decode Ways
    LeetCode 328 奇偶链表
    LeetCode 72 编辑距离
    LeetCode 226 翻转二叉树
    LeetCode 79单词搜索
    LeetCode 198 打家劫舍
    LeetCode 504 七进制数
  • 原文地址:https://www.cnblogs.com/peterYong/p/11372046.html
Copyright © 2011-2022 走看看