字符串的几种常用方法

1、字符串的定义

语法:

string ;

= ;

string = ;

字符串是引用类型,在定义

string ;

的时候在栈空间中,定义了一个的空间,该空间存放一个地址

当写到

= "The C# Programming Language";

的时候,会在堆内存分配一个空间,存放字符串"The C# Programming Language",并将首地址赋值给

因此指向定义的字符串

2、字符串的声明

字符串string对应MSIL(CTS)中的String,实际上是一个类

那么以前了解到,类需要使用new <构造方法>()来进行实例化,同样字符串也行(这里只介绍一种)

string = new string(new char[] {...});

注:这里String与string得到的效果一样

这里有个应用

字符串是不可变的,在内存中字符串一旦生成,将不会改变

即使之前使用的str1 + str2也只是生成了另一个字符串

那么要修改字符串,怎么处理呢?

这里有个方法

.ToCharArray();

该方法会将字符串,变成一个char类型的数组,因此需要用一个char类型的数组接收

例:修改一个字符串里面的内容

char[] ch = .ToCharArray();

// 处理字符数组,完成修改目的

= new string(ch);

3、字符串可以用索引访问

字符串,原本就是排在一起的字符,C#提供了用“下标”(索引)来访问字符串中的字符

例如:

string str = "jiangkun";

这里内存中将“j”分配编号0,“i”分配编号1,然后依次增加...

因此,如果需要访问k,数一数,编号是5,所以可以这么来

char temp = str[5];

那么得到的就是字符“k”

字符串也有一个Length属性,可以得到字符串的长度

4、常见的字符串方法

4.1 字符串大小写(字符)

string .ToUpper();

string .ToLower();

例:在等待用户输入的时候,常常不考虑用户输入的用户名大小(或一个程序中规定使用的大小写)

可以将用户的输入全部转换成小写、或大写再来进行比较

如:

Console.WriteLine("请输入用户名");

string uid = Console.ReadLine().ToLower();

// 再将uid与系统中的数据进行比较

4.2 移除首尾指定字符

方法原型

string .Trim();  // 移除首尾的空格

string .TrimStart(); // 移除开头的空格

string .TrimEnd();  // 移除结尾的空格

如果要指定移除的内容,可添加一个char数组作为参数

string .Trim(char[] ch);

例:在用户输入的时候,一般不考虑输入两边的空格,而使用Trim()方法

4.3 字符串的比较

Compare()方法

方法原型

int string.Compare(string str1,string str2);

按照字典排序比较

当str1 > str2时,返回1

当str1 = str2时,返回0

当str1 < str2时,返回-1

注:int string.Compare(string str1,string str2,bool ignoreCase)表示是否区分大小写

这里true表示不区分大小写,默认为false

Equals()方法

方法原型

bool .Equals(string str);

比较如果相等返回true,否则返回false

注:bool .Equals(string str, StringComparison.OrdinalIgnoreCase)表示不区分大小写

注:如果仅仅比较两个字符串是否相等,还是使用“==”比较简单

例如:

Console.WriteLine("请输入一个字符串");

string str1 = Console.ReadLine();

Console.WriteLine("请输入第二个字符串");

string str2 = Console.ReadLine();

// 不考虑大小写的比较

bool isEqual = str1.ToLower() == str2.ToLower();

4.4 字符串的合并与分割

合并Join方法

将数组strArr中的内容拼接成一个字符串,并在对应数组的每两项间添加分隔符str

string.Join(str,strArr);

方法原型

string string.Join(string str,string[] strArr);

字符串分割Split方法

方法原型:

string[] .Split(params char[] separator);

将字符串以separator数组中的字符分割,分割后得到的内容存到一个数组中

例:

// 分析这句话,提取这句话的单词

string str = "Hello, How are you?";

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

注:返回的数组中可以有空字符串项,如果要去掉这些空字符串项,可以使用

string[] .Split(char[] separator,StringSplitOptions.RemoveEmptyEntries);

因此例子可改为

string str = "Hello, How are you?";

string[] words = str.Split(new char[]{' ',',','?'},StringSplitOptions.RemoveEmptyEntries);

4.5 字符串查找

Contains方法

方法原型:

bool .Contains(string str);

表示字符串中是否包含str,如果包含,返回true,否则返回false

例:

Console.WriteLine("随便输入一串字母");

string str = Console.ReadLine();

if(str.Contains("abc"))

{

Console.WriteLine("字符串{0}中包含{1}",str,"abc");

}

else

{

Console.WriteLine("字符串{0}中不包含{1}",str,"abc");

}

IndexOf方法

常用的两种形式:

int .IndexOf(string str);     // 从头开始,出现第一次的下标

int .IndexOf(string str,int startIndex); // 从startIndex开始,出现第一次的下标

如果没有找到则返回-1

例:

string str = "C#语言基础,讲师蒋坤";

int res1 = str.IndexOf("蒋坤");

int res2 = str.IndexOf("蒋 坤");

Console.WriteLine(res1 + "\n" + res2);

注:LastIndexOf方法从最后一个开始匹配

IndexOfAny方法

方法原型:

int .IndexOfAny(char[] anyOf);

寻找字符数中的所有内容,返回第一个的位置

同样有两个参数的重载

int .IndexOfAny(char[] anyOf, int startIndex);

4.6 求子字符串

方法原型

string .Substring(int startIndex, int length);

从字符串的startIndex位置开始提取长度为length的字符串,如果省略第二个参数表示一直到最后

4.7 字符串的插入、移除和替换

4.7.1 插入

在字符串的index位置上插入str,原来的字符依次后移,变成一个新的字符串

= .Insert(index,str);

方法原型为:

string .Insert(int index, string str);

4.7.2 移除

在字符串中移除从startIndex开始,长度为length的字符串,剩下的字符按原序合并为一个新的字符串

= .Remove(startIndex,length);

方法原型为:

string .Remove(int startIndex, int length);

注:如果省略第二个参数,将移除startIndex后的所有字符串

4.7.3 替换

将字符串中的oldChar替换为newChar

= .Replace(oldChar,newChar);

方法原型:

string .Replace(char oldChar, char newChar);

同样,这个替换的字符也可以是字符串

string .Replace(string oldValue, string newValue);

4.8 判断结束与开始

判断字符串是否以某字符串开始或结束

bool .StartsWith(string str);

bool .EndsWith(string str);

注:字符串具有不可变性,对字符串的修改,实际上都是重新得到一个字符串,重新赋值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容