什么是字符串
字符串,顾名思义,就是用字符拼接成的文本值。字符串在存储上类似数组,不仅字符串的长度可取,而且每一维上的元素也可取。在C#语言中,可以通过string类创建字符串
字符串的声明与初始化
声明字符串
在C#语言中,字符串必须包含在一对双引号""
,例如
"23.23","ABC","你好"
可以通过以下语法格式来声明字符串
string str = [null];
字符串的初始化
引用字符串,实例代码如下:
string a = "时间就是金钱";
string b = "锄禾日当午" ;
string str1 ,str2 ;
str1 ="aaa";
str2 ='aaa' ;
当两个字符串对象引用相同的常量,就会具有相同的实体,例如上面的str1与str2就指向相同的内存地址
利用字符数组初始化
char[] charArray = {'t','i','m','e'};
string str =new string (charArray);
提取字符数组中的一部分初始化字符串
char[] charArray = { '时','间', '就', '是', '金', '钱' };
string str = new string(charArray, 4, 2);//输出金钱,说明第一个int参数是从第x开始(不包括),下一个是录取y个
Console.WriteLine(str);
提取字符串信息
获取字符串长度
获取字符串的长度可以使用string类的Length属性,
其中,属性值表示当前字符串中字符串字符串的数量
获取子字符串索引位置
IndexOf方法
IndexOf 方法返回的是搜索的字符或字符串首次出现的方法,即IndexOf与LastIndexOf方法。其中,IndexOf方法返回是搜索的字符或字符串最后一次出现的索引位置
IndexOf方法
IndexOf 方法返回是搜索的字符或字符串首次出现的索引位置,其常用的集中语法
public int IndexOf(char value)
public int IndexOf(string value)
public int IndexOf(char value,int startIndex)
public int IndexOf (string value ,int startIndex)
public int IndexOf(char value,int startIndex,int count)
public int IndexOf(string value ,int startIndex,int count)
value : 要搜索的字符或字符串
startIndex:搜索起始位置
count : 要检查的字符位置数
返回值:如果找到字符或字符串,则为value的从零开始的引索位置,如果未找到字符或字符则为-1
LastIndexOf方法
LastIndexOf方法返回的是搜索的字符或字符串最后一次出现的引索位置
public int LastIndexOf(char value)
public int LastIndexOf(string value)
public int LastIndexOf(char value,int startIndex)
public int LastIndexOf(string value,int startIndex)
public int LastIndexOf(char value,int startIndex,int count)
public int LastIndexOf(string value,int startIndex,int count)
判断字符串首尾内容
StartWith 方法
StartsWith 方法用来判断字符串是否已制定的内容开始
public bool StartsWith(string value)
public bool StartsWith(string value ,bool ignoreCase,CultureInfo culture)
- value : 要比较的字符串
- ignoreCase : 在比较过程中如果忽略大小写,则为true,否则为false
- culture: CultureInfo 对象,用来确定如果对字符串与value进行比较的区域性信息。如果culture为null,则使用当前区域性
- 返回值:如果value与字符串的开头字符相匹配,则为true,否则为false
string str = "梦想是有的,万一实现了呢?";
bool result =str.StartsWith("梦想") ;
Console.WriteLine(result);
第二个参数为true 则就可以忽略大小写
string str = "Keep on going never give up ";
bool result = str.StartsWith("keep",true,null);
Console.WriteLine(result);
EndsWith方法
EndsWith方法用来判断字符是否以指定的内容结束,语法如下
public bool EndsWith(string value)
public bool EndsWith(string value,bool ignoreCase,CultureInfo)
- value : 要比较的字符串
- ignoreCase : 在比较过程中如果忽略大小写,则为true,否则为false
- culture: CultureInfo 对象,用来确定如果对字符串与value进行比较的区域性信息。如果culture为null,则使用当前区域性
- 返回值:如果value与字符串的开头字符相匹配,则为true,否则为false
关于culture: CultureInfo
CultureInfo类位于System.Globalization命名空间内,这个类和命名空间许多人都不是很熟悉,实际我们在写程序写都经常间接性的接触这个类,当进行数字,日期时间,字符串匹配时,都会进行CultureInfo的操作,也就是说,也就是不同的CultureInfo下,这些操作的结果可能会不一样,由于我们大部分开发部署都是在同一种语言环境中,平日里可能没有感觉到它的用处,如果你的开发的项目是给国外用户用的,有可能在你机器上运行输出是一种效果,在客户机器上是另一种输出效果,这句需要用到CultureInfo类了,对使用用户来说,这也是ms提供的人性化的一面(比方说,同样是日期,中文环境输出符合中国人的习惯,德语环境中的输出符合德国人的习惯,这是默认的输出方式),但对开发人员和服务数据中心来说,就要选择是保证统一的输出,还是用ms的默认方式了。
借鉴于https://www.2cto.com/kf/201901/793932.html
字符串操作
#####字符串的拼接
使用“+”运算妇科完成对多个字符串的拼接,“+”运算符可以连接多个字符并产生一个string对象
string str1 = "hello";
string str2 = "world";
string s = str1 +" "+ str2 ;
Console.WriteLine(s);
注意:
C#中一个相连的字符串不能分开在两行中写。
例如
Console.WriteLine("I like
C#")
这种写法是错误的 ,如果一个字符串太长,为了方便阅读,可以将这个字符分在两行上书写,此时可以使用“+”将两个字符串拼接起来,之后在加号处换行。因此上面的语句可以修改如下
Console.WriteLine("I like" +
"C")
注意
上下行都有完整的双引号
比较字符串
对字符串进行比较的时候,可以使用前面学过的运算关系符“==”实现
string str1 = "mingrikeji";
string str2= "mingrikeji" ;
Console.WriteLine((str1==str2));
Equals方法主要用于比较、两个字符是否相同,如果相同返回值是true,否则为false。常用的两种语法格式如下
public bool Equals(string value)
public static bool Equals(string a,string b)
- value :与此字符串比较的字符串
- a和b : 要进行比较的两个字符串
- 返回值:false or true
字符串的大小写转换
对于字符串进行大小写转换时,需要使用string类提供的ToUpper方法和ToLower 方法,
public string ToUpper();
public string ToLower();
格式化字符串
在C#中,string类提供了一个静态的Formate 方法,用于将字符串数据格式装换成指定的格式,其常用的语法格式如下
public static string Format(string format,Object arg0)
public static string Format(string format,params Object[] args)
- format:用来指定字符串所要的格式化的形式,该参数的基本格式如下
{index[,length][:formatString]}
1.index :要设置格式的对象的参数列表中位置(从零开始)
2.length:参数字符串表示形式中包含的最小字符数。如果这个数值为正,则参数右对齐;如果该值是负的,则参数左对齐
3.formatString :要设置格式的对象支持的标准或自定义格式字符串
- arg0:要设置格式的对象
- args:一个对象数组,其中包含零个或多个要设置格式的对象
- 返回值:格式化后的字符串
格式化字符串只要两种情况,分别是数组类型数据的格式化和日期时间类型数据的格式化
数值类型数据的格式化
在实际开发中数值类型有多种显示方式,比如货币形式,百分比形式等,C#支持的标准数值格式规范如下所示
格式说明符 | 名称 | 说明 |
---|---|---|
C或c | 货币 | 结果:货币值,支持所有类型,小数位数 |
D或d | Decimal | 整型数字,负号可选,仅整型,最小位数 |
E或e | 指数(科学型) | 指数计数法。支持所有数值类,小数位数 |
F或f | 定点 | 整数和小数,负号可选 |
N或n | Number | 整数和小数,组分隔和小数分隔符,符号可选,所有类型,所需的小数位数 |
P或p | 百分比 | 乘以100并显示百分比符号的数字,所有数值类型,所需的小数位 |
X或x | 十六进制 | 十六进制字符串,仅整型,结果字符串中的位数 |
Console.WriteLine(string.Format("1251+3950的结果是(以货币形式显示):{0:C}", 1251 + 3950));
Console.WriteLine(string.Format("120000.1用科学技术法表示:{0:E}", 120000.1));
Console.WriteLine(string.Format("12800以分隔符数字显示的结果是:{0:N0}", 12800));//第8行代码中的{0:N0}表示显示的数字中不包括小数
Console.WriteLine(string.Format("PI取两位小数点:{0:F2}", Math.PI));//{0:F2}表示保留两位小数
Console.WriteLine(string.Format("33的16进制结果是:{0:X4}", 33));//{0:X4}表示显示4位数形式的十六进制数
Console.WriteLine(string.Format("天才是由{0:P0}的灵感,加上{1:P0}的汗水", 0.01, 0.99));//{1:P0}表示显示的百分比中中不包括小数
//输出1251 + 3950的结果是(以货币形式显示):¥5,201.00
//120000.1用科学技术法表示:1.200001E+005
//12800以分隔符数字显示的结果是:12,800
//PI取两位小数点:3.14
//33的16进制结果是:0021
//天才是由1 % 的灵感,加上99 % 的汗水
日期时间类型数据的格式化
如果希望日期时间按照某种标准格式输出,比如短日期格式,完整日期时间格式等,那么可以使用string类的Format方法将日期时间格式转化为指定的格式。C#支持的日期时间类型格式规范如下所示
格式说明符 | 说明 | 举例 |
---|---|---|
d | 短日期格式 | YYYY-MM-dd |
D | 长日期格式 | YYYY-MM-dd |
f | 完整日期/时间(短时间) | YYYY年MM月dd日 hh:mm |
F | 完整日期/时间(长时间) | YYYY年MM月dd日 hh:mm:ss |
g | 常规日期/时间格式(短时间) | YYYY-MM-dd hh:mm |
G | 常规日期/时间格式(长时间) | YYYY-MM-dd hh:mm:ss |
M或m | 月/日格式 | MM月dd日 |
t | 短时间格式 | hh:mm |
T | 长时间格式 | hh:mm:ss |
Y或y | 年/月格式 | YYYY年MM月 |
DateTime strDate = DateTime.Now;
Console.WriteLine(string.Format("当前日期的短日期格式表示:{0:d}", strDate));
Console.WriteLine(string.Format("当前日期的长日期格式表示:{0:D}", strDate));
Console.WriteLine();
Console.WriteLine(string.Format("当前日期间的完整日期/时间格式(短时间)表示:{0:f}", strDate));
Console.WriteLine(string.Format("当前日期时间的完整日期/时间格式(长时间)表示:{0:F}",strDate));
Console.WriteLine();
Console.WriteLine(string.Format("当前日期时间的常规日期/时间格式(短时间)表示:{0:g}", strDate));
Console.WriteLine(string.Format("当前日期时间的常规日期/时间格式(长时间)表示:{0:G}", strDate));
Console.WriteLine();
Console.WriteLine(string.Format("当前时间的短时间格式表示:{0:t}", strDate));
Console.WriteLine(string.Format("当前时间的长时间格式表示:{0:T}", strDate));
Console.WriteLine();
Console.WriteLine(string.Format("当前日期的月/日格式表示:{0:M}", strDate));
Console.WriteLine(string.Format("当前日期的年/月格式表示:{0:Y}", strDate));
//当前日期的短日期格式表示:2020/2/23
// 当前日期的长日期格式表示:2020年2月23日
//当前日期间的完整日期 / 时间格式(短时间)表示:2020年2月23日 15:44
//当前日期时间的完整日期 / 时间格式(长时间)表示:2020年2月23日 15:44:25
//当前日期时间的常规日期 / 时间格式(短时间)表示:2020 / 2 / 23 15:44
//当前日期时间的常规日期 / 时间格式(长时间)表示:2020 / 2 / 23 15:44:25
//当前时间的短时间格式表示:15:44
//当前时间的长时间格式表示:15:44:25
//当前日期的月 / 日格式表示:2月23日
//当前日期的年 / 月格式表示:2020年2月
我看到注释中有string与String就好奇这个两者有什么区别就去查了一下。借鉴于https://www.cnblogs.com/rosesmall/p/8351808.html
此外可以同过ToString方法中传入指定的 “格式说明符”,也可以实现对数值型数据数据和时间型数据的格式化,例如,下面的代码分别使用ToString方法将数字1298格式化为货币形式,当前日期格式化为年/月格式,代码如下
int menoy = 1298;
Console.WriteLine(menoy.ToString("C"));
DateTime dTime = new DateTime();
dTime = DateTime.Now;
Console.WriteLine(dTime.ToString("Y"));
//¥1,298.00
//2020年2月
截取字符串
string类提供了以Substring方法,该方法可以截取字符串中指定位置和指定长度的字符串,该方法有两种使用方式,分别如下
public string Substring (int startIndex )
public string Substring (int startIndex,int length)
- startIndex : 子字符串的起始位置的索引
- length : 子字符串的字符数
- 返回值 : 截取的字符串
从一个完整文件名中分别获取文件名和文件扩展名
代码如下
string strFile = "Program.cs";
Console.WriteLine("文件完整名称:" + strFile);
string strFileName = strFile.Substring(0,strFile.IndexOf('.'));
string strExtension = strFile.Substring(strFile.IndexOf('.'));
Console.WriteLine("文件名" + strFileName);
Console.WriteLine("扩展名" + strExtension);
Console.ReadLine();
分割字符串
string类提供了一个Split方法,用于根据指定的字符数组或者字符串进行分割,该方法有5种,分别如下
public string[] Split(params char[] separator)
public string[] Split(char[] separator,int count )
public string[] Split(string[] separator,StringSplitOptions options)
public string[] Split(char[] separator,int count,StringSplitOption options)
public string[] Split(string[] separator,int count,StringSplitOptions options)
- separator :分隔字符串的字符串的字符数组或字符串数组
- count: 要返回的字符串的最大数量
- options:要省略返回的数组中的空数组元素,则为RemoveEmptyEntries ;要包含返回的数组中的空数组元素,则为None
- 返回值:一个数组,器元素包含分割得到的子字符串,这些子字符串有separator中的一个字符或字符串分割
去除空白内容
string 类提供了Trim 方法,用来移除字符串中的所有开头空白字符串和结尾空白字符,其语法格式如下
public string Trim()
Trim方法返回值是从当前字符串的开头和结尾删除所有空白字符串后剩余的字符串
例子如下
string str = " abc ";
string shortStr = str.Trim();
Console.WriteLine(shortStr);//输出abc
使用Trim方法还可以从字符串的开头和结尾删除指定的字符
public string Trim (params char[] trimChars)
例如,使用Trim方法还可以从字符串的开头和结尾删除指定的字符,使用的形式如下
public string Trim(params char[] trimChars)
例子如下
char[] charToTrim = { '&', '@'};
string str = "@@@@@@@@@abc@@@@@@@&&";
string shortStr = str.Trim(charToTrim);
Console.WriteLine(shortStr);//输出abc
替换字符串
string类提供了一个Replace方法,用于将字符串中的某个字符或字符串替换成其他的字符或字符串替换成其他的字符或字符串,该方法有两种语法形式
public string Replace(char Ochar,char NChar)
public string Replace(string OValue,string Nvalue)
- OChar :待替换的字符
- NChar:替换后的新字符
- OValue :待替换的字符串
- NValue :替换后的新字符串
- 返回值:替换后字符或字符串之后得到的新字符串
string strOld = "one world,one dream ";
string strNew = strOld.Replace(',', ';');
Console.WriteLine(strNew);
可变字符串类
StringBuilder类的定义
StringBuilder类位于System.Text 命名空间中,如果要创建StringBulider对象,首先必须引用该命名空间。StringBulider类有6中不同的构造方法,分别如下
public StringBuilder()
public StringBuilder(int capacity)
public StringBuilder(string value)
public StringBuilder(int capacity,int maxCapacity)
public StringBuilder(string value,int capacity)
public StringBuilder(string value,int startIndex,int length,int capacity)
- capacity:StringBuilder对象的建议起始大小
- value :字符串,包含用于初始化StringBuilder对象的子字符串
- maxCapacity:当前字符串可包含的最大字符数
- startIndex:value中子字符串开始的位置
- length :子字符串中的字符数
例如创建一个StringBuilder对象,其初始引用的字符串为 “Hello World”,代码如下
StringBuilder MyStringBuilder = new StringBuilder("Hello World");
StringBuilder 类表示值为可变字符序列的类似字符串的对象,之所以值是可变的,是因为在通过追加,移除,替换,或插入字符而创建它后可以对它进行修改
StringBulider类的使用
StringBuilder的使用
方法 | 说明 |
---|---|
Append | 将文本或字符串追加到指定对象的末尾 |
AppendFormat | 自定义变量的格式将这些值追加到StringBuilder的对象的末尾 |
Inset | 将字符串或对象添加到当前StringBuilder对象中的指定位置 |
Remove | 从当前StringBuilder对象中移除指定数量的字符 |
Replace | 用另一个指定的字符来替换StringBuilder对象内的字符 |
我感觉这些方法简单的就不举例子啦
关于string与StringBuilder,stringBuffer的区别,借鉴于
https://blog.youkuaiyun.com/weixin_44588754/article/details/92760625