C#中char和string的入门使用教程
char 字符
char代表一个Unicode字符,它是System.Char的别名
char someChar = 'a';//定义了一个字符 char newLine= '\n';//这是一个换行符
System.Char定义了一组静态方法:
- ToUpper 将指定的字符转换为等效的大写形式
- ToLower 将指定的字符转换为等效的小写形式
- IsWhiteSpace 判断指定的字符是否为空白字符
- ……
例子:
Console.WriteLine(char.ToUpper('c'));//输出的是一个大写的C Console.WriteLine(char.ToLower('c'));//输出的是还是它自己 Console.WriteLine(char.ToUpper('C'));//输出的是还是它自己 Console.WriteLine(char.ToLower('C'));//输出的是一个小写的c Console.WriteLine(char.IsWhiteSpace('c'));//输出为False Console.WriteLine(char.IsWhiteSpace('\t'));//输出为True Console.WriteLine(char.IsWhiteSpace(' '));//输出为True
可以通过char或者System.Char来调用
例子:
Console.WriteLine(char.ToUpper('c'));//输出的是一个大写的C Console.WriteLine(System.Char.ToUpper('c'));//输出的是一个大写的C
现在这边会有一个问题,可能会引起一个bug,就是ToUpper,ToLower会遵循用户的地区设置,例如,char.ToUpper('i') == 'I',这句话在土耳其地区设置里就会返回False。
解决办法就是使用culture-invariant版本的方法,总会应用英语的Culture
- ToUpperInvariant
- ToLowerInvariant
例子:
//使用固定区域性的大小写规则,不依赖于区域性的设置,以下这两种方式是等价的 Console.WriteLine(char.ToUpperInvariant('i'));//输出的是大写的I Console.WriteLine(char.ToUpper('i', CultureInfo.InvariantCulture));
char是16bit的,足够代表基本多语言平面的任何Unicode字符,如果超出这个范围,那么必须使用surrogate pairs。
string 字符串
- string是System.String的别名
- string是不可变的
- string是字符的序列
如何构建string
例子:
string s1 = "Hello"; string s2 = "First Line\r\nSecond Line"; string s3 = @\\server\fileshare\helloworld.cs;
创建重复字符的字符串
使用string的构造函数创建一个重复指定次数的字符的字符串。
例子:
Console.WriteLine(new string('*', 10));//输出的结果就是**********
可以从char数组构建字符串
例子:
char[] ca = "Hello".ToCharArray(); string s = new string(ca);
ToCharArray的作用正好相反,把字符串转成字符数组。
string的构造函数也被重载用来接收各种(不安全的)指针类型,目的是从像char*这样的类型创建字符串。
Null 和 空string
空string的长度是0,通过literal或string.Empty静态字段来创建
相等性比较的例子:
string empty = ""; Console.WriteLine(empty == ""); // True Console.WriteLine(empty == string.Empty); // True Console.WriteLine(empty.Length == 0); // True
string可以为null,因为是引用类型
string nullString = null; Console.WriteLine(nullString == null); // True Console.WriteLine(nullString == ""); // False Console.WriteLine(nullString.Length == 0); // NullReferenceException
静态的string.IsNullOrEmpty通常用来判断字符串是否为空或者null,我习惯性使用IsNullOrWhiteSpace,这个判断字符串是否为空或者null或者空白的字符。
访问string里的字符
通过索引器
string str = "abcd"; char letter = str[1]; // letter = 'b'
string实现了IEnumerable<char>接口,所以可以foreach里面的每个元素
// 分别依次输出字符1 、2 、3 foreach (var item in "123") { Console.WriteLine(item); }
在string里进行搜索
最简单的方法包括:StartsWith,EndsWith和Contains。返回的是true或者false。
Console.WriteLine("HelloWorld.cs".EndsWith(".cs")); // 返回结果为True Console.WriteLine("HelloWorld.cs".Contains("World")); // 返回结果为True Console.WriteLine("HelloWorld.cs".EndsWith(".CS")); // 返回结果为False Console.WriteLine("HelloWorld.cs".Contains("world")); // 返回结果为False
StartsWith,EndsWith的重载方法允许你指定一个StringComparison枚举或一个CultureInfo对象,以便控制大小写和区域文化的敏感性,默认使用当前本地化的区域设置(locale),并且区分大小写。
Console.WriteLine("HelloWorld.cs".StartsWith("hello", StringComparison.InvariantCultureIgnoreCase)); // 返回结果为True
Contains没有提供类似的重载方法,但是你可以使用IndexOf方法,它会返回给定字符/子字符串在被搜索字符串里的首个位置。
同时,IndexOf提供了重载方法,它可以接收一个起始位置参数(开始搜索的索引值),以及一个StringComparison枚举
Console.WriteLine("abcde".IndexOf("cd")); // 结果为2 Console.WriteLine("abcde abcde".IndexOf("CD", 6, StringComparison.CurrentCultureIgnoreCase)); // 结果为8
LastIndexOf,它和IndexOf类似,但是它是反向搜索
IndexOfAny,它会返回一组字符里任意一个元素的第一个匹配的位置。
Console.WriteLine("abc,de f".IndexOfAny(new char[] { ' ', ',' })); // 结果为3 Console.WriteLine("sdgp5jesu5fa9afe0".IndexOfAny("0123456789".ToCharArray())); // 结果为4
LastIndexOfAny,功能类似,方向相反
操纵或者控制 string
因为string是不可变的,所以所有操纵string的方法返回的都是一个新的string,原来的string是原封不动的。
Substring,会抽取字符串的一部分出来。
string left3 = "12345".Substring(0, 3); // 结果就是123 string mid3 = "12345".Substring(1, 3); // 结果为234 //如果忽略长度,那么就从起始位置一直到字符串的最后 string end3 = "12345".Substring(2); // 结果为345
Insert、Remove,在指定的位置插入、移除字符串。
string s1 = "helloworld".Insert(5, ","); // 结果为hello,world string s2 = s1.Remove(5, 1); // 结果为helloworld
PadLeft、PadRight,会使用指定的字符(没有指定就是空格)填充string,以达到指定的长度(如果string原本长度就长于指定的长度,那么它就不变)。
Console.WriteLine("12345".PadLeft(10, '*')); // 输出结果就是*****12345 Console.WriteLine("12345".PadLeft(10)); // 输出结果就是 12345
TrimStart,TrimEnd从开始或结尾移除指定的字符(默认是空白符:空格,tab,换行以及Unicode里相应的变种)。
Trim,会把开始和结尾的空白字符都移除。
Console.WriteLine(" abc \r\n ".Trim().Length); // 结果为3
Replace,替换所有指定的字符/字符串,(非重叠的)。
Console.WriteLine("hello world".Replace(" ", " | ")); // 结果为hello | world Console.WriteLine("hello world".Replace(" ", "")); // 结果为helloworld
ToUpper,ToLower,返回string的大/小写等等效形式。默认情况下也遵循用户当前的语言设定,与上面的char的方法一样,不再赘述。
拆分、合并字符串
Split方法可以拆分字符串。
- 默认使用空格作为分隔符
- 重载方法可以接收param字符数组,或string作为分隔符
- 可选接收StringSplitOptions枚举作为参数,有个选项可以移除空的字符串
string[] words = "my name is bob".Split(); //打印结果依次输出my name is bob四个单词 foreach (var item in words) { Console.WriteLine(item); } string[] split1 = "123-abc".Split('-'); //打印结果依次输出123和abc两个字符串 foreach (var item in split1) { Console.WriteLine(item); } string[] split2 = "123-abc-".Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); //打印结果依次输出123和abc两个字符串,最后一个空项会被移除 foreach (var item in split2) { Console.WriteLine(item); }
Join(静态)方法,功能与Split相反,用于合并成一个字符串,它需要一个分隔符和字符串数组。
string[] words = "my name is bob".Split(); Console.WriteLine(string.Join(",", words)); // 输出结果为一个字符串my,name,is,bob
Concat(静态)方法,和Join类似,但是只接收params string数组作为参数,无需分隔符。和+的效果一样,起始编译器就是把它翻译成+。
string str1 = string.Concat("hello", "world"); // 结果为helloworld string str2 = "hello" + "world"; // 结果为helloworld
String.Format 和 复合格式的string
Format(静态)方法,提供了一个方便的方式来构建嵌入变量的字符串,嵌入的变量/值可以是任何类型,Format会调用它们的ToString方法。
含有嵌入变量的string就叫做复合格式string(composite format string)。
当你调用String.Format的时候,你就得传入一个复合格式string,后边跟着它里面嵌入的这些变量。
string composite = "ab{0}cd{1}e"; Console.WriteLine(string.Format(composite, "123", 456)); // 结果为ab123cd456e
大括号里的每个数字都叫做格式化项(format item),数值对应参数(argument)的位置,并且后边可以跟着:
- 一个逗号,和一个要应用的最小宽度(通常用来对齐列,负数表示左对齐,正数表示右对齐)
- 一个冒号,和一个格式化字符串(format string)
string composite = "Name={0, -20} Credit Limit={1,15:C}"; Console.WriteLine(string.Format(composite, "Bob", 500)); Console.WriteLine(string.Format(composite, "Elizatech", 20000));
结果如下:
从C#6开始,你可以使用字符串插值的方式(interpolated string literals)。
int value = 32; Console.WriteLine($"abc{value}"); //结果为abc32
总结
到此这篇关于C#中char和string入门使用教程的文章就介绍到这了,更多相关C# char和string使用内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
相关文章
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25