首页 > 编程语言 >C# 字符与字符串的增删改查

C# 字符与字符串的增删改查

时间:2023-05-17 16:31:58浏览次数:42  
标签:字符 MessageBox string Show C# Format 改查 字符串 增删

4.1 字符类Char 的使用

1. Char 类概述

C#中的char数据类型:代表单个字符

• char类型,BLC名称System.Char。

• 取值范围对应Unicode字符集

• 占两个字节


2. Char 类的使用

tostring 将此实例的值转换为其等效的字符串表示

char类型可以隐式的转换到可以容纳无符号short类型的数值类型

对于其它数值类型,需要显示转换

char a = 'A';

int i = a;


MessageBox.Show(i.ToString());

3. 转义字符

1) 下面是C#中常见的转义字符

2) \r\n 回车换行

\t 横向跳到下一制表位置

3) \\ 反斜线符

4) \b 退格

5) \r 回车


4.2 字符串类String 的使用

A. 字符串的声明及赋值

String 变量名;//申明

在方法或者控件中赋值

变量名=“内容”;


B. 连接多个字符串

a) String.Format

另一个字符串连接方法为 String.Format。 此方法非常适合从少量组件字符串生成字符串的情况。

MessageBox.Show(i.ToString());

string str3 = "熟练的技能出自于无数次的实验\r\n\t-------扩视机器视觉";

MessageBox.Show(str3);//弹窗显示

string str4 = string.Format(str3 + "\r\n\t\t---欣欣");

MessageBox.Show(str4);//弹窗显示

b) StringBuilder

在其他情况下,可能需要将字符串合并在循环中,此时不知道要合并的源字符串的数量,而且源字符串的实际数量可能很大。 StringBuilder 类专门用于此类方案。

使用stringBuilder类,如果容量小于长度的时候,会自动增加容量。

声明stringBuilder类的时候,如果没有指明容量,那么他的容量小于等于16

//******************************** 1、Append(往结尾添加)******************

StringBuilder sb = new StringBuilder("欣欣");

sb.Append("20200522");

MessageBox.Show(sb.ToString());//弹窗显示


//******************************** 2、Insert(插入)******************

sb.Insert(2,"---");//在下标2插入“----”

MessageBox.Show(sb.ToString());//弹窗显示



//******************************** 3、Remove(删除)******************

sb.Remove(2, 3);//从下标二的地方删除3个字符

MessageBox.Show(sb.ToString());//弹窗显示


//******************************** 4、Replace(替换)******************

sb.Replace("---", "+++");//将---替换为+++

MessageBox.Show(sb.ToString());//弹窗显示


C. 比较字符串

函数方法 返回值

string.Compare(字符串1,字符串2) 相等时返回0,前者较大时返回1,后者较大时返回-1

字符串1.CompareTo(字符串2) 相等时返回0,前者较大时返回1,后者较大时返回-1

字符串1.Equals(字符串2) 相等时返回True,否则返回False

string str5 = "欣欣";

string str6 = "安安呐";

MessageBox.Show(string.Compare(str5, str6).ToString());//弹窗显示

MessageBox.Show(str5.CompareTo(str6).ToString());//弹窗显示

MessageBox.Show(str5.Equals(str6).ToString());//弹窗显示

D. 格式化字符串、

a) 格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元)

MessageBox.Show(string.Format("{0:C}", 0.2));//结果为:¥0.20 (英文操作系统结果:$0.20)


MessageBox.Show(string.Format("{0:C1}", 23.15));// 结果为:¥23.2 (截取会自动四舍五入)


MessageBox.Show(string.Format("市场价:{0:C},优惠价{1:C}", 23.15, 19.82));// 格式化多个Object实例


b) 格式化十进制的数字(格式化成固定的位数,位数不能少于未格式化前,只支持整形)

a) string.Format("{0:D3}",23) 结果为:023

b) string.Format("{0:D2}",1223) 结果为:1223,(精度说明符指示结果字符串中所需的最少数字个数。)

c) 用分号隔开的数字,并指定小数点后的位数

a) string.Format("{0:N}", 14200) 结果为:14,200.00 (默认为小数点后面两位)

b) string.Format("{0:N3}", 14200.2458) 结果为:14,200.246 (自动四舍五入)

d) 格式化百分比

a) string.Format("{0:P}", 0.24583) 结果为:24.58% (默认保留百分的两位小数)

b) string.Format("{0:P1}", 0.24583) 结果为:24.6% (自动四舍五入)

e) 零占位符和数字占位符

a) string.Format("{0:0000.00}", 12394.039) 结果为:12394.04

b) string.Format("{0:0000.00}", 194.039) 结果为:0194.04

c) string.Format("{0:###.##}", 12394.039) 结果为:12394.04

d) string.Format("{0:####.#}", 194.039) 结果为:194

下面的这段说明比较难理解,多测试一下实际的应用就可以明白了。

零占位符:

如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到结果字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。

“00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。

数字占位符:

如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。

请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。

“##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。

f) 空格占位符

var number = "666";

var str = string.Format("{0,10}", number);

MessageBox.Show("$" + str + "$");//将目标字符串格式化成10个字符,原字符左对齐,不足补空格.


var str1 = number.PadLeft(10);

MessageBox.Show("$" + str1 + "$");//一样的效果用String的实例PadLeft方法也能够实现,PadLeft支持填充自定义字符,空格占位符只能用空格.


var str2 = string.Format("{0,-10}", number);

MessageBox.Show("$" + str2 + "$");//将目标字符串格式化成10个字符,原字符右边对齐,不足补空格.

g) 日期格式化

MessageBox.Show(string.Format("{0:d}", System.DateTime.Now)); //结果为:2009 - 3 - 20 (月份位置不是03)

MessageBox.Show(string.Format("{0:D}", System.DateTime.Now));//结果为:2009年3月20日

MessageBox.Show(string.Format("{0:f}", System.DateTime.Now)); //结果为:2009年3月20日 15:37

MessageBox.Show(string.Format("{0:F}", System.DateTime.Now)); //结果为:2009年3月20日 15:37:52

MessageBox.Show(string.Format("{0:g}", System.DateTime.Now));//结果为:2009 - 3 - 20 15:38

MessageBox.Show(string.Format("{0:G}", System.DateTime.Now)); //结果为:2009 - 3 - 20 15:39:27

MessageBox.Show(string.Format("{0:m}", System.DateTime.Now)); //结果为:3月20日

MessageBox.Show(string.Format("{0:t}", System.DateTime.Now));//结果为:15:41

MessageBox.Show(string.Format("{0:T}", System.DateTime.Now)); //结果为:15:41:50

E. 截取字符串

a) 几个经常用到的字符串的截取

取字符串的前i个字符

string str = "123abc456";

int i = 3;

MessageBox.Show(str.Substring(0, i));

MessageBox.Show(str.Remove(i, str.Length - i));//删除3-后面的字符

b) 去掉字符串的前i个字符:

MessageBox.Show(str.Remove(0, i));//删除0-i字符

MessageBox.Show(str.Substring(i));//截取i个字符

c) 从右边开始取i个字符:

MessageBox.Show(str.Substring(str.Length - i));

MessageBox.Show(str.Remove(0, str.Length - i));

d) 从右边开始去掉i个字符:

MessageBox.Show(str.Substring(0, str.Length - i));

MessageBox.Show(str.Remove(str.Length - i, i));

e) 判断字符串中是否有"abc" 有则去掉之

string a = "abc";

Regex r = new Regex(a);

Match m = r.Match(str);

if (m.Success)

{

//第一种方法

MessageBox.Show(str.Replace(a, ""));//将选中的子替换为空



//第二种方法

string str1, str2;

str1 = str.Substring(0, m.Index);//截取前字符

str2 = str.Substring(m.Index + a.Length, str.Length - a.Length - m.Index);//截取后字符

MessageBox.Show(str1 + str2);//拼接字符

}

f) 如果字符串中有"abc"则替换成"ABC"

str=str.Replace("abc","ABC");

F. 分割字符串

a) 普通分割字符串方式

string str = "a,b,c";

string[] arr = str.Split(',');


foreach (string s in arr)

{

MessageBox.Show(s);

}

b) 利用字符串进行分割字符串方式

string str1 = "a字体b字体c字体d字体e";

string strTemp = "字体";

string[] arr1 = Regex.Split(str1, strTemp, RegexOptions.IgnoreCase);

foreach (string s in arr)

{

MessageBox.Show(s);

}


c) 多个字符分割字符串方式

string str2 = "a,b,c@d$e";

char[] charTemp = { ',', '@', '$' };

string[] arr2 = str2.Split(charTemp);

foreach (string s in arr)

{

MessageBox.Show(s);

}


string str3 = "a,b,c@d$e";

string[] arr3 = str3.Split(new char[] { ',', '@', '$' });


foreach (string s in arr)

{

MessageBox.Show(s);

}

d) 分割字符串且去除空字符数组方式

string str4 = "a,,,b,c,d,e";

string[] arr4 = str4.Split(',');


foreach (string s in arr)

{

MessageBox.Show(s);


string str5 = "a,,,b,c,d,e";

string[] arr5 = str5.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

foreach (string s1 in arr5)

{

MessageBox.Show(s1);

}



e) 分割字符串且不区用作分割字符串的字符的大小写方式

string str6 = "bacAdae";

string[] arr6 = Regex.Split(str6, "a", RegexOptions.IgnoreCase);

foreach (string s2 in arr)

{

MessageBox.Show(s2);

}

f) 插入和填充字符串


string str7 = "下载";

string str8 = str7.Insert(0, "用一生");

string str9 = str8.Insert(5, "你");

MessageBox.Show(str9);

// 填充字符串

string str10 = "妹";

string str20 = str10.PadLeft(2, '你');

string str30 = str20.PadRight(3, '的');

MessageBox.Show(str30);

g) 删除字符串

方法1:删除字符串最后一个字符

string s = "扩试机器视觉实训基地";

MessageBox.Show(s.Substring(0, s.Length - 1));//删除字符串最后一个字符 ;

方法1延申:String.Substring (Int32 index) :保留字符串下标index之后的子串;

MessageBox.Show(s.Substring(3 ,2 ));//保留字符串下标index之后的子串 ;

方法2:s=s.Trim();删除头尾部的空格,遇到首个非空格的字符结束;

(1) String.Trim(char myChar):分别从字符串的前面和后面移除能匹配字符myChar字符的字符,直到遍历的第一个不匹配myChar字符集的字符,停止遍历移除操作;

char myChar = '地';

string s2 = s1.Trim(myChar);

MessageBox.Show(s2);

Trim后面的括号内不填字符的话,默认移除空格字符。

(2)String.Trim(char[ ] myChar):分别从字符串的前面和后面移除能匹配字符myChar字符集里的字符,直到遍历的第一个不匹配myChar字符集的字符,停止遍历移除操作;

string s3 = "扩试机器视觉实训基地";

char[] myChar1 = { '扩', '地' };

string s4 = s3.Trim(myChar1);

MessageBox.Show(s4);

(2) String.TrimStart(char[ ] myChar): 去掉字符串头部的字符

MessageBox.Show(s3.TrimStart(myChar1));//去掉字符串头部的字符


同Tirm(),括号内为空时,默认空格字符;

String.TrimEnd(char[ ] myChar):去掉字符串尾部的字符

MessageBox.Show(s3.TrimEnd(myChar1));//去掉字符串尾部的字符

同Tirm(),括号内为空时,默认空格字符;


h) 复制字符串

复制是通过Copy和CopyTo来实现的。

string.Copy(要复制的字符串);

CopyTo(要复制字符的起始位置(从第几个字符开始往后复制(不包括第几个字符)),目标字符数组,目标数组中的开始存放位置,要复制的字符个数);

string s6 = "视觉学院";

char[] myChar2 = { '扩','试','机','器','视','觉','实','训','基','地' };

s6.CopyTo(0, myChar2, 2, 4);

MessageBox.Show("myChar2等于:" + myChar2.ToString());//复制是通过Copy来实现的。


4.3 可变字符串类

1. StringBuilder类的定义

StringBuilder 类位于System.Text命名空间下,表示可变字符字符串, 此类不能被继承。使用StringBuilder类每次重新生成新字符串时不是再生成一个新实例,而是直接再原来字符串占用的内存看空间上进行处理,而且它可以动态的分配占用内存空间大小。因此在字符串处理操作比较多的情况下,使用StringBuilder类可以大大提高系统的性能。

2. StringBuilder 类的使用

1) StringBuilder.Append 的常用方法

Append(UInt32) 向此字符串后面,追加指定的 32 位无符号整数的字符串

Append(Char, Int32) 向此字符串后面,追加指定数量的字符

Append(Char[], Int32, Int32) 向此字符串后面,追加指定字符数组的字符(从指定位置开始,取多少个)

Append(String) 向此字符串后面,追加另外一个字符串

Append(Char[]) 向此字符串后面,追加字符数组

2) StringBuilder.AppendFormat 的常用方法

a)  此方法使用 .NET Framework 的复合格式设置功能,将对象的值转换为其文本表示形式,并将该表示形式嵌入到当前 StringBuilder 对象中。

b) AppendFormat(String, Object) 追加复合格式字符串,然后返回的字符串。 每个格式项都替换为一个自变量的字符串表示形式。

c) AppendFormat(String, Object[]) 追加复合格式字符串,然后返回的字符串。 每个格式项都由参数数组中相应参数的字符串表示形式替换。

d) AppendFormat(IFormatProvider, String, Object[]) 追加复合格式字符串,然后返回的字符串。 每个格式项都使用指定的格式提供程序由参数数组中相应参数的字符串表示形式替换。

e) AppendFormat(String, Object, Object) 追加复合格式字符串,然后返回的字符串。 每个格式项都替换为这两个参数中任意一个参数的字符串表示形式。

f) AppendFormat(String, Object, Object, Object) 追加复合格式字符串,然后返回的字符串。 每个格式项都替换为这三个参数中任意一个参数的字符串表示形式。

3) StringBuilder.CopyTo 的常用方法

  此方法就是,将源字符串中,指定下标开始,复制指定数量字符到目标字符数组里,并指明开始的位置。下面语法的参数sourceIndex是此实例中字符复制的起始位置。dest是要复制字符的数组,而destIndex是目标将复制字符的起始位置。count参数是要复制的字符数。

4) 4StringBuilder.Insert 的常用方法

  此方法就是,将指定对象的字符串,插入到此实例中的指定字符位置。

a) Insert(Int32, UInt32) 将 32 位无符号整数,变成字符串表示形式,插入到此实例中的指定字符位置。

b) Insert(Int32, String) 在实例中的指定字符位置,插入字符串到此。

c) Insert(Int32, String, Int32) 将指定字符串的一个或更多副本,插入到此实例中的指定字符位置。

d) Insert(Int32, Char) 将指定的 Unicode 字符的字符串,变成字符串表示形式,插入到此实例中的指定位置。

e) Insert(Int32, Char[]) 将指定的 Unicode 字符数组,变成字符串表示形式,插入到此实例中的指定字符位置。

f) Insert(Int32, Char[], Int32, Int32) 将指定的 Unicode 字符子数组,变成字符串表示形式,插入到此实例中的指定字符位置。

g) Insert(Int32, Object) 将对象的字符串表示形式,插入到此实例中的指定字符位置。

5) StringBuilder.Remove(Int32, Int32) 的常用方法

  此方法就是,将指定范围的字符从此实例中移除。

6) StringBuilder.Replace 方法

  此方法就是,将此实例中出现的所有指定字符或字符串,替换为其他的指定字符或字符串。

a) Replace(Char, Char) 将此实例中出现的所有指定字符,替换为其他指定字符。

b) Replace(String, String) 将此实例中出现的所有指定字符串,替换为其他指定字符串。

c) Replace(Char, Char, Int32, Int32) 将此实例的子字符串中出现的所有指定字符,替换为其他指定字符。

d) Replace(String, String, Int32, Int32) 将此实例的子字符串中出现的所有指定字符串,替换为其他指定字符串。

3. StringBuilder 类与String 类的区别

1) String是不可变类,StringBuilder是可变类。

2) string本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低.NET编译器的工作效率。

3) StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。


标签:字符,MessageBox,string,Show,C#,Format,改查,字符串,增删
From: https://blog.51cto.com/u_16073071/6292264

相关文章

  • 中国科技领军企业探访之旅——CIO百人会走进软通动力成功举办!
    2023年作为AIGC行业的元年,深度学习算法的持续升级迭代使得AIGC科学技术的计算通用能力迅速发展。随着越来越多的海内外科技企业加入竞争,众多AI工具应运而生,我们的想象空间在AI的推动下不断扩展。CIO百人会作为数字化领域高端智库,汇聚了中国数字化领域的资深专家、学者和优秀CIO,搭建......
  • 华普物联HP-RSCAT-G100 RS485转CAT1网关
    产品概述HP-RSCAT-G100是华普公司推出的导轨式modbus网关网关使用modbusRTU协议从RS485采集数据以JSON协议上报到TCP客户端、mqtt服务器等该网关作为modbus主机可以对(最大)50个modbus从机遍历采集(最大)10个变量。网关支持服务器主动查询,定时上报变量,条件触发上报。支持基站定......
  • IO库和string、vector
    IO库重载了移位运算符C++并没有函数输出,而是奇怪的运算符scanf()   printf()实际上cin他们是一个类的对象 干脆禁止拷贝,因为要管理缓冲区,防止冲突<<移位有左结合性,所以具体应该是(cout<<a)<<b  前面应该返回一个cout细度 第一个参数是ostream对象,因为禁......
  • ShardingSphere + Pagehelper 组合sql查询中包含 DISTINCT GROUP BY 等关键字和聚合函
    Pagehelper中配置说明params:为了支持startPage(Objectparams)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;r......
  • DML语句 ------- mysql增删改
    DML语句1、插入(insert)insertinto表values(数据)---------要求插入数据的数量,类型要和表的结构一致insertinto表(列名)values(数据)-----------要求插入的数据的数量顺序和表名后的列要一致insertinto表(列名)select------......
  • c++unique
    #include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>usingnamespacestd;intn,a[5211314],len;intmain(){ cin>>n; for(inti=1;i<=n;++i){ cin>>a[i]......
  • C# 表达式与运算符
    3.1表达式1.赋值表达式  由赋值运算符(=)连接起来的式子叫做赋值表达式,例如:a=a+1。变量可以重新赋值,老值不复存在。  小扩展:有一种复合赋值运算符,例如:Intnum=10;num=num+10;  可以写成:Intnum=10;num+=10; 2.算术表达式  由算术运算符(+,-,*,/,%)连接起来的式子叫做......
  • DQL语句(一) -----简单select查询
    DQL语句1、格式select列名*Nfrom表名where查询条件1and/or查询条件2groupby列Having分组条件Orderby排序2、规则sql在书写时除了查询条件外,大小写都可以select*fromuserwhereuname='zs';SELECT*FROMUSERWHEREUNAME='zs';要是在公司要看其他......
  • Nacos 启动出现No DataSource set
     出现此问题需检查下:配置信息是否已启用,默认nacos使用内置数据库,如果要使用外置数据库时需要更改配置文件: application.properties 更新如下4个信息,设置为要使用的外部数据库信息 启动nacos如果还是出现连接数据库失败提示:在保障外部数据库可用,且配置数据连接信息......
  • 支持复制粘贴word图片的CKEditor编辑器
    ​ 这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@     page contentType="text/html;cha......