C#中的string和StringBuilder

  • string
    • string使用
      • Length
      • 字符串比较、CompareTo()
      • 字符串连接
      • 字符串的索引
      • Replace()
      • Split()
      • Substring()
      • ToUpper()、ToLower()
      • Trim()
      • Concat()
      • Format()
      • IndexOf()
      • Insert()
      • 总结
  • StringBuilder
    • 创建 StringBuilder对象
      • Append()
      • Insert()
      • Remove()
      • Replace()
      • ToString()
      • 总结

string

string 存在System命名空间中,其创建的字符串是不可变的

string使用

首先,创建字符串 string str = “www.sola.com”;
这样就直接创建了字符串 str,之后,对字符串进行一些属性的介绍

Length

Length属性是返回当前字符串的个数

 string str = " www.sola.com";int sLen = str.Length;Console.Write(sLen);

如上,输出的为 www.sola.com 的个数,13

字符串比较、CompareTo()

字符串比较可以使用" == " 或者使用 CompareTo() 函数

if (str == "www.solar.com")
{Console.Write("True");
}
else
{Console.Write("False");
}

这是用 " == " 来进行比较的,当相等时,输出 True, 不想等,输出 False。
使用 CompareTo() 函数比较的话,如果相等,会返回 0, 若不想等,则返回 一个非 0 的值,用法如下

int nRet = str.CompareTo("www.solar.com");
Console.Write(nRet);

这时,nRet 返回值为 -1

字符串连接

在讲述字符串连接的时候,我需要声明一下,string 字符串是不可变的,也就是无法进行修改,所以当我们在更改string字符串的时候,往往都会重新创建一个string字符串然后拼接在一起组成新的字符串。

例如下:

str = "http://" + str;
Console.Write(str);

这样会生成新的字符串str 值为 “http://www.sola.com”。而其中的原理如下图:

我们创建一个str字符串时候,str 会指向堆中的内存。而当我们给新的字符串拼接的时候,会在堆内存中重新创建一个,然后将str重新指向新的字符串。

而老的字符串因为在堆中没有任何人的使用,则会被GC回收,这就是字符串重新拼接的原理

字符串的索引

字符串的索引是从 0 开始的,所以我们可以通过索引值来获取字符串的每一个字符,例如,我们要找到第一个 '.‘字符,第一个’.'字符的索引是 3,所以就可以这样使用。

char c = str[3];
Console.Write(c);

Replace()

Replace() 用一个字符或字符串替换给定字符串中的给定字符或字符串
例如,若把字符串中的www 替换成 sss

str = str.Replace("www", "sss");
Console.Write(str);

输出为:sss.sola.com
当然也可以字符进行处理,我们想把字符串中的 ‘.’ 替换成 ‘_’

str = str.Replace('.', '_');
Console.Write(str);

输出为:www_sola_com

Split()

Split() 在出现给定字符的地方,将字符串拆分为字符数组
例如,我们将str字符串按照 ‘.’ 来拆分

string[] strArray = str.Split('.');
foreach(var temp in strArray)
{Console.WriteLine(temp);
}

输出的结果就是
www
sola
com

注意的是Split()返回的值为字符串数组,所以要用字符串数组来接收

Substring()

Substring() 是截取给定字符串,有两个参数,第一个是从第几个索引开始,第二个是截取的长度,不填默认之后的所有
例如:截取第三个之后的所有

str = str.Substring(3);
Console.Write(str);

输出的结果就是:.sola.com
例如: 从第四个开始,截取后四个字符串

str = str.Substring(4, 4);
Console.Write(str);

输出的结果就是:sola

ToUpper()、ToLower()

ToUpper() 把字符串所有的小写转换为大写
ToLower() 把字符串所有的大写转换成小写

str = str.ToUpper();
Console.Write(str);
str = str.ToLower();
Console.WriteLine();
Console.Write(str);

输出:
WWW.SOLA.COM
www.sola.com

Trim()

Trim() 删除首尾空白字符
例如我们改写str = " www.sola.com ";

str = " www.sola.com";
str = str.Trim();
Console.Write(str);

输出:www.sola.com

Concat()

Concat是string类中的静态方法,是将两个字符串合并起来

str = string.Concat(str, "-sss", "-www");
Console.Write(str);

输出:www.sola.com-sss-www
Concat() 的参数可以有无数个,目的就是将参数顺序的合并在一起,组成新的字符串

Format()

Format() 是string类中静态方法,是格式化输出。
如下:

str = string.Format("www.{0}.com", 123);
Console.Write(str);

输出:www.123.com

IndexOf()

IndexOf() 通过给定的字符或字符串,进行查找,返回第一个符合条件的索引值,若不存在,则返回-1

int index = str.IndexOf("www");
Console.WriteLine(index);
index = str.IndexOf("wsw");
Console.WriteLine(index);

输出结果为:
0
-1

Insert()

Insert() 把一个字符串插入到另一个字符串中指定的索引处,返回新的字符串

str = str.Insert(2, "sef");
Console.Write(str);

输出的结果为:
wwsefw.123.com

总结

string字符串是创建了一个不可变的数据类型,一旦但字符串进行初始化,该字符串就不能改变内容,若想改变只能创建一个新的字符串把旧的内容赋值到新的字符串中,然后返回新的字符串的引用,若重复修改给定的字符串,效率会很低。

StringBuilder

StringBuilder 类是位于System.Text命名空间下的。是可变的数据类型

创建 StringBuilder对象

StringBuilder sb = new StringBuilder("www.sola.com");
StringBuilder sb1 = new StringBuilder(100);
StringBuilder sb2 = new StringBuilder("www.sola.com", 100);

这三种都是创建StringBuilder对象
第一个是直接创建,然后直接将 "www.sola.com"对其进行赋值,大小为"www.sola.com"大小
第二个是创建了 100字节内存的一个对象,并没有对其赋值,待后续赋值
第三个是创建了100字节内存的一个对象,并用"www.sola.com"进行赋值。
这三种都是创建对象时候占用内存。当在处理的过程中,发现使用内存不够了, StringBuilder会自动的添加一个新的大小为其原来 内存2倍内存

Append()

Append() 函数是对当前字符串追加一个字符或字符串

StringBuilder sb = new StringBuilder("www.sola.com");
sb.Append("-wwwsola");
Console.Write(sb);

输出结果为:www.sola.com-wwwsola

Insert()

Insert() 在制定位置上添加一个字符串或字符
例如:在第二个位置上插入ssss

sb.Insert(1, "ssss");
Console.Write(sb);

输出的结果为:wssssww.sola.com

Remove()

Remove() 在指定位置开始删除给定个数的字符
例如:删除 sola 四个字节

sb.Remove(4, 4);
Console.Write(sb);

输出的结果为:www…com

Replace()

Replace() 在当前字符串中,用给定的字符或字符串全部替换成另一个字符或字符串
例如:将所有的www 替换成 sss

sb.Replace("www", "sss");
Console.Write(sb);

输出的结果为:sss.sola.com

ToString()

ToString() 将当前StringBuilder中储存的字符串提取成一个不可变的字符串
返回值要用 string 接受
例如:

string str = sb.ToString();
Console.Write(str);

输出结果为:www.sola.com

总结

StringBuilder是可变的,大小会根据字符串内容来2倍增加,在多线程中,StringBuilder类行的字符串是不安全的。

C#中的string和StringBuilder相关推荐

  1. Java:中的String,StringBuilder,StringBuffer三者的区别

    Java中的String,StringBuilder,StringBuffer三者的区别 最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBu ...

  2. c#中的string和StringBuilder的区别

    string和StringBuilder的区别 解析c#中的string和StringBuilder的区别,只有非常了解后我们才能更好的编程和灵活使用. 区别 1.类 String 表示字符串, 比如 ...

  3. Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  4. 重温java中的String,StringBuffer,StringBuilder类

    不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...

  5. Java中的String、StringBuilder、StringBuffer

    Java中的String是个永恒的话题,直说我想说的. 1.String 是永远不会变的,传递的引用是一个Copy,无论刮风下雨,它都在自己的小窝里呆的好好的. 2.重载"+"和S ...

  6. 探秘Java中的String、StringBuilder以及StringBuffer

    转载:http://www.cnblogs.com/dolphin0520/p/3778589.html 一.你了解String类吗? 想要了解一个类,最好的办法就是看这个类的实现源代码,String ...

  7. java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  8. Java中的String,StringBuilder,StringBuffer的区别

    这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > ...

  9. 【转】探秘Java中的String、StringBuilder以及StringBuffer

    探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一 ...

最新文章

  1. 计算机应用基础第二版在线作业c,计算机应用基础作业二(答案)
  2. 委托到Lambda的进化: ()= {} 这个lambda表达式就是一个无参数的委托及具体方法的组合体。...
  3. PostgreSQL学习总结(1)—— PostgreSQL 入门简介与安装
  4. 浅谈帆软报表的权限授权,以便于二次开发
  5. 在鼠标点击的位置 ,添加一个div ,类似手表右键菜单
  6. 2022年考研数据结构_5 树
  7. layer弹出层笔记
  8. 新年祝福:向所有开源工作人员表示真诚的感恩
  9. Apollo火后,深扒AI+交通产业的生态应用
  10. 暑假将至,人贩子猖狂
  11. Android 仿百合网超火爆社交app首页滑动效果
  12. Ansible学习笔记——JINJA2模板的语法及使用(template模块)
  13. 信息检索(IR)笔记1: 倒排索引(Inverted Index)
  14. 从英特尔上海紫竹研发中心归来,认真聊一聊傲腾
  15. 嵌入式linux界面开发,基于嵌入式Linux平台实现GUI系统的设计方案
  16. 2021年教育改革大动作
  17. BBEdit 12.6.3 FIXED 特别版 Mac 强大的文本和HTML编辑器及汉化工具
  18. rabbitmq-plugins enable rabbitmq_management Failed to start Elixir.
  19. Android安全专项-Apk加固
  20. (仿牛客论坛项目)01 - 开发社区首页

热门文章

  1. EOS 5D第一代与RIT解码RAW
  2. ipmsg在360 ARP防火墙后不能接收文件
  3. 说明是 URL scheme
  4. 获得WIN7管理员权限(可通过修改注册表,或者组策略改变)
  5. 5+ App开发入门指南
  6. spring cloud---Getway网关
  7. 蓝桥杯每日一练——用筛法求之N内的素数 python
  8. python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战
  9. [Go实战]个人第一个go样例,gin+gorm
  10. 三十、基础五迪米特法则