5. 字符与字符串

15 篇文章 4 订阅

1 字符类Char的使用

1.1 Char类概述

Char类主要用来存储单个字符,占用16位(俩个字节)的内存空间。在定义字符型变量时,要以单引号标识。

char ch1  = 'L';

Char只定义一个Unicode字符。Unicode字符是目前计算机中通用的字符编码,它为针对不同语言中的每个字符设定了统一的二进制编码,用于满足跨语言、跨平台、的文本转换、处理的要求。

1.2 Char类的使用

Char类的常用方法及使用说明

方法说明
IsControl指示指定的Unicode字符是否属于控制字符类别
IsDigit指示某个Unicode字符是否属于十进制数字类别
IsHighSurrogate指示指定的Char对象是否为高代理项
IsLetter指示某个Unicode字符是否属于字母类别
IsLetterOrDight指示某个Unicode字符是属于字母类别还是属于十进制数字类别
IsLower指示某个Unicode字符是否小写字母类别
IsLowSurrogate指示指定的Char对象是否为低代理项
IsNumber指示某个Unicode字符是否属于数字类别
IsPunctuation指示某个Unicode字符是否属于标点符号类别
IsSeparator指示某个Unicode字符是否属于分割符类别
IsSurrogate指示某个Unicode字符是否属于代理项字符类别
IsSurrogatePair指示指定的Char对象是否形成代理项对
IsSymbol指示某个Unicode字符是否属于符号字符类别
IsUpper指示某个Unicode字符是否属于大写字母类别
IsWhiteSpace指示某个Unicode字符是否属于空白类别
Parse将指定字符串的值转换为它的等效Unicode字符
ToLower将Unicode字符的值转换为它的小写等效项
ToLowerInvariant使用固定区域性的大小写规则,将Unicode字符的值转换为其小写等销项
ToString将此实例的值转换为其等效的字符串表示
ToUpper将Unicode字符的值转换为它的大写等效项
ToUpperInvariant使用固定区域性的大小写规则,将Unicode字符的值转换为其大写等销项
TryParse将指定字符串的值转换为它的等效Unicode字符

Is开头的方法大多是判断是否为某个类别。
To开头的方法大多是转换为其他Unicode字符。

1.3 转义字符

转义字符是一种特殊的字符变量,其以反斜杠""开头,转义符\只针对后面紧跟着的字符进行操作。

转义符说明
\n回车换行
\t横向跳到下一制表位置
\’’双引号
\b退格
\r回车
\f换页
\反斜线符
\’单引号

2 字符类String的使用

2.1 字符串的声明及赋值

在C#语言中,字符串必须包含在一对上双引号之内。

String str1 = null;
String str2;
String str3 = ""张三;

2.2 连接多个字符串

使用"+“运算符可以完成对多个字符串连接的功能。”+"运算符可以连接多个字符串并产生一个新的String对象。

C#中的依据相连字符串不予许分开在俩行中书写,因此可以使用"+"将一个字符串分为俩行连接起来。

String Name = "唐吉坷德" +             
             "多弗拉明戈";

2.3 比较字符串

2.3.1 "=="比较运算符

使用比较运算符比较俩个字符长的值是否相等,实现代码如下:

string str1 = "张三";
string str2 = "李四";
Console.WriteLine(str1==str2);

2.3.2 Compare方法

Compare方法用来比较俩个字符串是否相等,它有多个重载方法,其中最常见的俩种方法如下:
Int compare(string strA,string strB)
Int compare(string strA,string strB,bool ignorCase)

ignorCase为true则忽略大小写。Compare方法为静态方法,可以直接引用。返回值为0时标识俩字符串相同。例:

using System;
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "张三";
            string str2 = "李四";

            Console.WriteLine(String.Compare(str1, str2));  //1
            Console.WriteLine(String.Compare(str1, str1));  //0
            Console.WriteLine(String.Compare(str2, str1));  //-1
            Console.ReadKey();
        }
    }
}

注意:
比较字符串并非比较字符串长度的大小,而是比较字符串在英文字典中的位置。比较字符串按照字典排序的规则,判断俩个字符串的大小。在英文字典中,前面的单词小于在后面的单词。

2.3.3 CompareTo方法

CompareTo方法与Compare方法相似,都可以比较俩个字符串是否相等,不同的是,CompareTo方法以实例对象本身与指定的字符串作比较。
public int CompareTo(string str1)

string str1 = "张三";
string str2 = "李四";

Console.WriteLine(str1.CompareTo(str2));  //1
Console.WriteLine(str1.CompareTo(str1));  //0
Console.WriteLine(str2.CompareTo(str1));  //-1
Console.ReadKey();

2.3.4 Equals方法

Equals方法主要用于比较俩个字符串是否相等,返回值为bool类型。
public bool Equals(string value)
public static bool Equals(string a,string b)

string str1 = "张三";
string str2 = "李四";
Console.WriteLine(str1.Equals(str1));  //True
Console.WriteLine(str1.Equals(str2));  //False
Console.WriteLine(Equals(str1,str2));  //False
Console.ReadKey();

2.4 格式化字符串

在C#中,String类提供了一个静态的Format方法,用于将字符串数据格式化成指定的格式,其语法如下:
Public static string Format(string format,object onj);
format : 用来指定字符串所需要格式化的形式
obj :要被个格式化的对象

用于日期时间的格式规范:

格式规范日期格式说明
dYYYY-MM-DD简短日期格式
DYYYY年MM月DD日完整日期格式
thh:mm简短时间格式
Thh:mm:ss完整时间格式
fYYYY年MM月DD日 hh:mm简短的日期/时间格式
FYYYY年MM月DD日 hh:mm:ss完整的的日期/时间格式
gYYYY-MM-DD hh:mm简短的可排序的日期/时间格式
GYYYY-MM-DD hh:mm:ss完整的可排序的日期/时间格式
M或mMM月DD日月/日格式
Y或yYYYY年MM月年/月格式

例:

string str1 = "我的名字叫";
string str2 = "李四";
Console.WriteLine(string.Format("{0},{1}!!",str1,str2));  //我的名字叫李四
DateTime dt = DateTime.Now;
string strA = String.Format("{0:D}", dt);
Console.WriteLine(strA);  
Console.ReadKey();     //2021年4月8日

2.5 截取字符串

String类提供了一个Substring方法,该方法可以截取字符串中指定位置和指定长度的子字符串,其语法格式如下:
public string Substring(int startIndex,int length)
startIndex:子字符串起始位置的索引
length:子字符串中的字符数
在使用Substring方法截取字符串时,如果length参数的长度大于截取字符串的长度,将从起始位置的所引出截取之后的所有字符,
例:

 string str1 = "我的名字叫李四";
string str2 = str1.Substring(5,2);
Console.WriteLine(str2);  //李四
Console.ReadKey();    

2.6 分割字符串

string类提供了一个Spilt方法,用于分割字符串,此方法的返回值是包含所有分割字符串的数组对象,可以通过数组取得所有分割的字符串,其语法格式如下:
public string[] spilt(params char[] separator)
separator : 是一个数组,包含分隔符

string strA = "我!的@名#字$叫%李^四";
char[] separator = {'!','@','#','$','%','^' };
string[] spiltstrings = new string[10];
spiltstrings = strA.Split(separator);
for (int i = 0; i < spiltstrings.Length; i++)
{
	Console.WriteLine("item{0}:{1}",i, spiltstrings[i]);
	//item0: 我
	//item1:的
	//item2:名
	//item3:字
	//item4:叫
	//item5:李
	//item6:四
}
Console.ReadKey();    


2.7 插入和填充字符串

2.7.1 插入字符串

string 类提供了一个Insert方法,用于向字符串的任意位置插入新元素,其与语法格式如下:
public string Insert (int startIndex,string value)
startIndex:用于指定索要插入的位置,索引从0开始
value:指定要插入的字符串

string strA = "唐李世民";
strA = strA.Insert(1,"太宗");  
Console.WriteLine(strA);   //唐太宗李世民
Console.ReadKey();    

2.7.2 填充字符串

string类提供了PadLeft/PadRight方法用于填充字符串,PadLeft方法在字符串的左侧进行字符填充,PadRight方法在字符串的右侧进行字符填充,语法格式如下:
public string PadLeft(int totalWidth,char paddingChar)
public string PadRight(int totalWidth,char paddingChar)
totalWidth:指定填充后的字符串长度
paddingChar:指定所要填充的字符,如果省略则填充空格符号。

string strA = "*^__^*";
strA = strA.PadRight(7, ')');
strA = strA.PadLeft(8, '(');
Console.WriteLine(strA);   //(*^__^*)
Console.ReadKey();

2.8 删除字符串

Sting类提供了Remove方法,用于从一个字符串中的指定位置,删除指定数量的字符,其语法格式如下:
Public string Remove(int startIndex);
Public string Remove(int startIndex,int count);
startIndex:用于指定开始删除的位置,索引从零开始
count:指定删除的字符数量

注意:参数count的值不能是0也不能是负数(startIndex也不能为负数),否则将会引发异常。如果为零则毫无意义。

string strA = "(*^__^*)";
strA = strA.Remove(7);
strA = strA.Remove(0, 1);
Console.WriteLine(strA);   //*^__^*
Console.ReadKey();

2.9 复制字符串

String提供了Copy和CopyTo方法,用于将字符串或子字符串复制到另一个字符串或Char类型的数组中。

2.9.1 Copy方法

创建一个与指定的字符串具有相同值的字符串的新实例,其语法格式如下:
public static string Copy(string str)
str:是要复制的字符串
返回值:与string具有相同值的字符串

 string strA = "(*^__^*)";
string strB = string.Copy(strA);
Console.WriteLine(strB);   // (*^__^*)
Console.ReadKey();

2.9.1 CopyTo方法

CopyTo方法的功能与Copy方法基本相同,但是CopyTo方法可以将字符串中的某一部分复制到另一个数组中,其语法格式如下:
Public void CompTo(int sourceIndex,char[] destination,int destinationIndex,int count)

参数说明
sourceIndex需要复制的字符串的起始位置
destination目标字符数组
destinationIndex指定目标数组中的开始存放位置

count 指定要复制的字符个数

 string strA = "*---(*^__^*)---";
char[] ch1 = new char[20];
strA.CopyTo(4,ch1,0,8);
Console.WriteLine(ch1);   // (*^__^*)
Console.ReadKey();

2.10 替换字符串

String类提供了一个Replace方法,用于将字符串中的某个字符或字符串替换成其他的字符或字符串,其语法格式如下:
public string Replace(char 0Char,char NChar)
public string Replace(string 0value,string NValue)
参数|说明
0Char | 待替换的字符
NChar | 替换后的新字符
0value | 待替换的字符串
NValue | 替换后的新字符串

 string strA = "*---(*^__^*)---";
string strB = strA.Replace("-","0");
string strC = strA.Replace("__", "____");
Console.WriteLine(strB);   //*000(*^__ ^ *)000
Console.WriteLine(strC);   //* ---(*^____ ^ *)-- -
Console.ReadKey();

3 可变字符串类

对于创建成功的字符串对象,它的长度是固定的,内容不能被改变和编译。虽然使用"+"可以达到附加新字符串的目的,但这样做会产生一个新的字符串实例,将极大的的增加系统开销。而C#中提供了一个可变的字符序列StringBuilder类,大大提高了频繁增加字符串的效率。

3.1 StringBuilder类的定义

public StringBuilder (string value,int cap)
value:StringBuilder对象引用的字符串
cap:设定StringBuilder对象的初始大小

StringBuilder MyStringBuilder = new StringBuilder("Hello Word!!");

3.2 StringBuilder类的使用

StringBuilder类存在于System.Txt命名空间中,使用时需要引用此命名空间。
StringBuilder类常用方法及说明:

方法说明
Append将文本或字符串追加到指定对象的末尾
AppendFormat自定义变量的格式并将这些值追加到StringBuilder对象的末尾
Insert将字符串或对象添加到当前StringBuilder对象中的指定位置
Remove从当前StringBuilder对象中移除指定数量的字符
Replace用另一个指定的字符来替换StringBuilder对象内的字符
StringBuilder strA = new StringBuilder("姓名") ;
strA = strA.Append("李四");
Console.WriteLine(strA);     //姓名李四
int num = 1000;
strA = strA.AppendFormat("{0:C}",num);
Console.WriteLine(strA);    //姓名李四¥1,000.00
strA = strA.Insert(2, "叫");
Console.WriteLine(strA);    //姓名叫李四¥1,000.00
strA = strA.Remove(2, 1);
Console.WriteLine(strA);    //姓名李四¥1,000.00
strA = strA.Replace("姓名", "Name is");
Console.WriteLine(strA);    //Name is李四¥1,000.00
Console.ReadKey();

3.3 StringBuilder类与String类的区别

String对象是不可改变的,每次使用String类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为该对象分配新的空间。在需要对字符串进行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用StringBuilder类。
例:

class Program
{
    [Obsolete]
    static void Main(string[] args)
    {
        string strA = "";
        long startTime = DateTime.Now.Millisecond;
        for (int i = 0; i < 10000; i++)
        {
            strA += i;
        }
        long endTime = DateTime.Now.Millisecond;
        Console.WriteLine("string消耗时间" + (endTime - startTime));    //string消耗时间48
        StringBuilder sb1 = new StringBuilder("");
        startTime = DateTime.Now.Millisecond;
        for (int j = 0; j < 10000; j++)
        {
            sb1.Append(j);
        }
        endTime = DateTime.Now.Millisecond;
        Console.WriteLine("strinbuilder消耗时间" + (endTime - startTime));  //strinbuilder消耗时间1
        Console.ReadKey();

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值