• (8)C#字符串


    一、字符串

    为什么说string是一个不可变的字符序列。

    string a="me"; 
     a="meeeee";
    string b="me"

    给a赋值"me",然后重新赋值"meeeee"

    当执行String a="me";这段代码开辟了两块内存,一块在栈中存放a,然后另一块在堆中存放数据"me",a指向了me的地址,假设这个地址是A1。

    然后执行a="meeeee";当个a重新赋值时,栈不会在开辟新空间,堆中会开辟新空间存放"meeeee"地址A2,此时a不在指向A1而是转向A2。

    所以再输出a时它并不是修改了A1里的值而是重新建立了一个A2。

    接着String b="me" 会新建一个栈空间b指向了原来存放me的地址A1。

    变化下一重新分析遍

    string a = "me";
    string b = a;
    Console.WriteLine(a);//me
    Console.WriteLine(b);//me
    a = "meeeee";//重新a赋值
    Console.WriteLine(a);//meeeee
    Console.WriteLine(b);//me

    首先执行 string a = "me"; 和上边一样开辟了两块内存,一块在栈中存放a,然后另一块在堆中存放数据"me",a指向了me的地址,假设这个地址是A1。
    然后 string b = a; 在栈中开辟了一个新空间存放b 然后b也指向了a的地址A1。
    最后给a 重新赋值"meeeee"  
    a = "meeeee";这段代码,用原来的栈a,指向了一个新开辟的空间地址假设他叫A2,里面存放着数据"meeeee".这个栈a不再指向A1.现在指向A1的只有栈b。

     String s和 new String 的区别

    string s1="hello";
    string s2= new String("hello");

     String s1 = "hello"; 先在内存中找是不是有"hello" 这个对象,

    如果有,就让s1指向那个"hello".如果内存里没有"hello",就创建一个新的对象保存"hello".

    String s2=new String ("hello") 就是不管内存里是不是已经有"hello"这个对象,

    都新建一个对象保存"hello".

    刚刚发现两个问题

    1、java里String里的S是大写的。而C#里有string和String大小写两种形式。

    2、String s2=new String(""); 这句话在java里没有问题,但是在C#里会报错。

    C#里String和srting的区别

    1、 string是关键字,String是类

    2、用C#编写代码的情况下尽量使用小写的string,比较符合规范,如果在追求效率的情况下可以使用大写的String,因为最终通过编译后,小写的string会变成大写的String,可以给编译减少负荷,从而运行效率提高。

    "=="和equals的区别

    ==是比较两个字符串的引用地址是否相同,equals比较的是两者的值是否相同.

    null 字符串和空字符串

    null 字符串:没有分配内存;空字符串分配了内存,但内存里面没有数据.

    string str=sting.empty; //分配了内存,相当于 string str="";  写成后者比较容易出错, 多在里面加个空格string str=" ";   其他区别暂时不明,总之感觉用前者靠谱点

    string str=null;//没分配内存

    string.IsNullOrEmpty

    当字符串是null或者sting.empty为null是返回真

           string a = null;
                string b = string.Empty;
                string c = "";
                string d = " ";
    
                if (string.IsNullOrEmpty(a)) 
                {
                    Console.WriteLine("a字符串为真");//执行
                }
                if (string.IsNullOrEmpty(b))
                {
                    Console.WriteLine("b字符串为真");//执行
                }
                if (string.IsNullOrEmpty(c))
                {
                    Console.WriteLine("c字符串为真");//执行
                }
                if (string.IsNullOrEmpty(d))
                {
                    Console.WriteLine("d字符串为真");//不执行
                }
                Console.ReadLine();

    DBNull和null的区别:

    ??

    StringBuilder类

     待补

    System.Text.Encoding.ASCII.GetString ???

    Convert.ToBase64String 方法  图片转字节,字节转字符串

    将 8 位无符号整数数组的值转换为其用 Base64 数字编码的等效字符串表示形式。

    字符串前加@的意思

    加@的意思是告诉系统,@后面的字符串当作正常的字符串解析就好,不用进行转义。如果不加,里面有些字符必须转义后才能正确识别。
    例如

    string str = "abcde"; //系统报错

    string str =@ "abcde"; //正确

    原样输出字符串

     方法

    String.Substring 方法

    重载

    Substring(Int32)   从此实例检索子字符串。 子字符串在指定的字符位置开始并一直到该字符串的末尾。

                string s = "abcdefg";
                string ss = s.Substring(3);//从字符串的第四位数开始往后截取
                Console.WriteLine(ss);

    Substring(Int32, Int32)  从此实例检索子字符串。 子字符串从指定的字符位置开始且具有指定的长度。

     string s = "abcdefg";
                string ss = s.Substring(3,2);
                Console.WriteLine(ss);

    第二个参数表示:从第四位开始,一共截取2个数

    运算符重载

    string str= "hello";
    
    str += " world";

     

     int转字符时定义输出格式

    格式说明符 说明 示例 输出
    C 货币 2.5.ToString("C") ¥2.50
    D 十进制数 25.ToString("D5") 00025
    E 科学型 25000.ToString("E") 2.500000E+005
    F 固定点 25.ToString("F2") 25.00
    G 常规 2.5.ToString("G") 2.5
    N 数字 2500000.ToString("N") 2,500,000.00
    X 十六进制 255.ToString("X") FF

     

    Environment.NewLine  ??

     

    字符串切割

    1、用字符串分隔:

    using System.Text.RegularExpressions;
    string str="aaajsbbbjsccc";
    string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);
    foreach (string i in sArray) Response.Write(i.ToString() + "<br>"); 

    输出结果:

    aaa
    bbb
    ccc
     

    2、用多个字符来分隔:

    string str="aaajbbbscccjdddseee";
    string[] sArray=str.Split(new char[2]{'j','s'}); 
    foreach(string i in sArray) Response.Write(i.ToString() + "<br>");  

     输出结果:
    aaa
    bbb
    ccc
    ddd
    eee
     
    3、用单个字符来分隔:

    string str="aaajbbbjccc";
    string[] sArray=str.Split('j');
    foreach(string i in sArray) Response.Write(i.ToString() + "<br>")

     输出结果
    aaa

    bbb

    ccc

    截取后四位 

     str.Substring(str.Length - 4, 4)

    删除后四位

      str.Substring(0,str - 4)

    去除字符串中的空格,回车,换行符,制表符

    str.Replace("
    ", "").Replace(" ", "").Replace("	", "").Replace("
    ", "")

    统计某字符出现的数量

    string reg = @"(#)";//需要匹配的字串
    MatchCollection con = new Regex(reg).Matches(“abg#fsdf#sadg”);
    int i=con.count;

    c#6.0开始可以简化string.Format的写法

    public void p(string name)
    {
        Console.WriteLine(string.Format("Hello,{0}",name));
        Console.WriteLine($("Hello,{name}"));//C#6.0
    }

    格式化字符串

    
    
    string.Format("Today is {0:D}",DateTime.Now);
    
    
    
     
  • 相关阅读:
    PTA数据结构与算法题目集(中文) 7-6
    PTA数据结构与算法题目集(中文) 7-5
    PTA数据结构与算法题目集(中文) 7-4
    PTA数据结构与算法题目集(中文) 7-3
    数据结构学习第二十三天
    数据结构学习第二十三天
    数据结构学习第二十二天
    数据结构学习第二十一天
    数据结构学习第二十天
    并发之ATOMIC原子操作--CAS乐观锁原理(二)
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/5603979.html
Copyright © 2020-2023  润新知