当前位置: 首页 > ds >正文

String 字符串基础和常用API

字符串

  1. 字面量:就是一种语法糖

    • 如:string a = “abcd”;
  2. String a = new String(new char[] {‘a’,‘b’,‘c’,‘d’}) //调用构造函数创建

  3. 可以使用 unicode 编码达到加密的目的

  4. 使用@可以把地址中的 \ 不再转义

  5. 字符串中对 + 做了重载使其作用于拼接字符串


StringBuider 可变字符串

大量的字符使用 StringBuider

  1. 容量默认为16
  2. 长度 <= 容量
  3. 当储存的字符串超过容量是会自动扩容。
    • 一般是成倍扩容,但考虑到为了节省空间,最后一次扩容比较灵活
StringBuider sb = new StringBuider();  // (括号中是容量) 默认为16

StringBuider 常用API

可变字符串使用移除、替换等 api 会改变自身

  1. Append //末尾追加
     sb.Append('a'); sb.AppendLine();  //末尾追加并换行sb.AppendFormat("{0,C2}",a);  //格式化
  1. Insert //在指定位置插入指定字符串

    • -  sb.Insert(0, "abc"); 
      
  2. Remover //移除,替换指定字符串

    • sb.Remover("a", "b"); 
      
  3. Clear //清空


字符串内存分配

字符串在中有一个单独的空间来处理字符串:

字符串的内存分配细节

C# 编译器会把代码中出现的字符串字面量保存在一个称为“字符串驻留池(intern pool)”的地方。

示例:

string s1 = "hello";
string s2 = "hello";
Console.WriteLine(object.ReferenceEquals(s1, s2));  // 输出 True

说明:s1s2 实际上引用的是同一个字符串实例。

2. 使用 new 创建字符串
string s3 = new string("hello".ToCharArray());
Console.WriteLine(object.ReferenceEquals(s1, s3));  // 输出 False

说明:使用 new 创建会在堆上分配一个新的实例,不在驻留池中。

3. 字符串连接
string a = "he";
string b = "llo";
string c = a + b;  // 编译时不可确定,运行时才拼接
Console.WriteLine(object.ReferenceEquals("hello", c));  // False

但使用 const 或字面量连接时,编译器会优化为一个常量,驻留在池中。



字符串API

StringComparison: 字符串比较器

  1. Length //获取字符串的长度,即字符串中字符的个数.

  2. Chars //在当前 String 对象中获取 Char 对象的指定位置

  3. IndexOf //返回整数,找不到返回-1,得到指定的字符串在原字符串中第一次出现的位置(索引).

  4. LastlndexOf //返回整数,得到指定的字符串在原字符串中最后一次出现的位置.

  5. StartsWith //返回布尔型的值,判断某个字符串是否以指定的字符串开头.

  6. EndsWith //返回布尔型的值,判断某个字符串是否以指定的字符串结尾.

  7. ToLower //返回一个新的字符串,将字符串中的大写字母转小写字母.

  8. ToUpper //返回一个新的字符串,将字符串中的小写字母转换成大写字母.

  9. Trim //返回一个新的字符串,不带任何参数时表示将原字符串中前后的空格删除.

  10. TrimStart //返回一个新的字符串,将字符串中开头的空格删除

  11. TrimEnd //返回一个新的字符串,将字符串中结尾的空格删除

  12. Remove //返回一个新的字符串,将字符串中指定范围的字符串移除.

  13. Replace //把字符串字串替换为其它字符串

  14. Substring //返回一个新的字符串,用于截取指定的字符串.

  15. PadLeft //返回一个新的字符串,从字符串的左侧填充空格达到指定的字符串长度.

    • //参数1.填充的数量    //参数2.填充的符号
      str.PadLeft(2,*)
      
  16. PadRight //返回一个新的字符串,从字符串的右侧填充空格达到指定的字符串长度.

  17. Remove //从字符串指定索引开始删除指定长度的字符串,返回一个新字符串

  18. Insert //返回一个新的字符串,将一个字符串插入到另一个字符串中指定索引的位置.

  19. contain //字符串是否包含某个字符串 (区分大小写)

  20. IsNullOrEmpty //判断字符串对象是否为类型或者是空字符串

  21. str.ToCharArray(); //ToCharArray 把字符串分割成字符数组

  22. str1.Split(‘,’) //以特殊符号为参考分割字符串为字符串数组

  23. Join(" ",a) //把数组组合成字符串 以某个字符串作为组合符号

  24. concat (x,y," “) //拼接字符串效果类似于 x+y+” "

  25. Clone() //克隆,克隆的是地址,返回的类型是 object

  26. Copy() //复制,复制的是值,返回的类型是string

    • CopyTo() //复制的来源,没有返回值

    • 参数1:从源字符串哪个索引位置开始复制
      参数2:把复制的内容放到那个字符数组中
      参数3:把复制的内容在		目标中从哪个位置开始放。
      参数4:复制几个字符,不要超过源字符串最大长度
      str. CopyTo(1,chars,9,1);
      
    • Copy是静态方法 CotyTo是实例方法,没有返回值

  1. Extensions //扩展

    • public static calss StringExtensions 
      {public static string Hello(this String str,int x)  //this :扩展到哪个对象上{return str + x;}
      }
      
  2. Format //字符串格式化

    • string.Format({0,4},"abc")  //{参数索引,占的宽度} 索引 0 的字符串,格式化为 4 位,不足用空格补齐
      
  3. string.Empty //空字符串


格式化字符串

  1. $ //模板字符串

  2. string.concat () //字符串拼接

  3. string.Format () //格式化API

    • string.Format ("{0:C}",1234)  //"{参数位置:格式化字符}",字符串
      

格式化数字

  1. C或c :Currency 货币格式 //默认保留两位小数
  2. D或d :Decimal 十进制格式(十进制整数,不要和.Net的Decimal数据类型混淆了)
  3. E或e :Exponent 指数格式
  4. F或f :保留几位小数位 //四舍五入
  5. G或g :General 常用格式
  6. N或n :Number 默认逗号分割千位的数字,比如1234将会被变成1,234
  7. P或p :Percentage 百分%符号格式 //默认保留两位小数
  8. R或r :Round-trip 圆整(只用于浮点数)保证一个数字被转化成字符串以后可以再被转回成同样的数字
  9. X或x :转换为16进制
//例如
Console.WriteLine("{0:C}",1234);
string.Format("{0:C}",1234);
  1. 0 占位 : 有几个0保留几位整数位

    Console.WriteLine("{0:0000}",123.11);  //结果: 0123.11
    
  2. ‘#’ 数字占位 :

    Console.WriteLine("{0:###,##,#}",123.11);  //结果: 
    
http://www.xdnf.cn/news/4307.html

相关文章:

  • 钢厂首选,profinet转profibus在煤电项目中的协议转换解决方案
  • CAN报文中UDS部分的帧类型
  • ONLYOFFICE 文档 API :新的文档格式支持及配置方法
  • VNP46A3灯光遥感数据全球拼接并重采样
  • ArcGIS Pro图斑属性自动联动更新-在线卫星底图图斑采集
  • Kotlin密封类优化Android状态管理
  • 技术对暴力的削弱
  • 前端知识-forwardRef
  • 数字孪生储能充电站,实现智慧能源设施全景管控
  • 63.微服务保姆教程 (六) SkyWalking--分布式链路追踪系统/分布式的应用性能管理工具
  • 乘法逆元【费马小定理+扩展欧几里得】
  • MySQL性能调优探秘:我的实战笔记 (上篇:从EXPLAIN到SQL重写)
  • iPaaS制造案例丨某照明行业头部企业借助谷云科技iPaaS步入数字化转型“快车道”
  • 一个基于Asp.Net Core + Angular + Bootstrap开源CMS系统
  • Redis 使用及命令操作
  • Nginx 安全防护与 HTTPS 安全部署
  • 可炫可转防丢帽 金士顿DTXS闪存盘致敬经典
  • 2025年服务器技术全景解析:量子计算、液冷革命与未来生态构建
  • Kubernetes笔记(1)Kubernetes入门
  • Premiere(Pr) CS6 - 2025 软件安装包+安装教程
  • 手写 Vue 源码 === Effect 机制解析
  • 招标专家随机抽选——设计讲解—未来之窗智能编程——仙盟创梦IDE
  • 哈希表的设计
  • QQMUSIC测试报告
  • 将真实世界带入Unreal Engine:Cesium for Unreal深度解析与实战指南
  • 人工智能在医疗运营编程中的应用综述
  • 分布式、高并发-Day04
  • Gitee的介绍
  • Spring AI 函数调用(Function Call)系统设计方案
  • C++23 std::generator:用于范围的同步协程生成器 (P2502R2, P2787R0)