C#中char和string的入门使用教程

作者:NanKingQG 时间:2022-06-14 15:07:17 

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#中char和string的入门使用教程 

 从C#6开始,你可以使用字符串插值的方式(interpolated string literals)。


int value = 32;
Console.WriteLine($"abc{value}"); //结果为abc32

来源:https://www.cnblogs.com/njabsky/p/13336678.html

标签:c#,char,string
0
投稿

猜你喜欢

  • 如何在MyBatis中实现DataSource

    2021-11-29 13:49:48
  • 解决springboot 启动找不到主类的问题

    2023-06-13 04:58:56
  • 重写Java中的equals方法介绍

    2023-06-24 00:30:26
  • Java版的7种单例模式写法示例

    2023-08-13 04:24:57
  • Java日常练习题,每天进步一点点(40)

    2022-12-20 14:39:53
  • java读取word-excel-ppt文件代码

    2022-07-06 14:20:46
  • 一文详解C#中方法重载的底层玩法

    2022-03-08 11:11:03
  • java如何通过IP解析地理位置

    2021-09-11 08:01:07
  • Java线程池运行状态监控实现解析

    2021-10-06 07:15:14
  • Java 中的 xx ≠ null 是什么新语法

    2022-09-10 20:51:13
  • IDEA教程创建SpringBoot前后端分离项目示例图解

    2022-06-30 02:41:10
  • Java杂谈之类和对象 封装 构造方法以及代码块详解

    2022-03-13 12:38:26
  • Eclipse下基于Java的OpenCV开发环境配置教程

    2022-01-30 21:02:54
  • GC调优实战之高分配速率High Allocation Rate

    2021-09-30 22:03:21
  • C#之CLR内存深入分析

    2023-01-24 17:18:07
  • Java代码读取properties配置文件的示例代码

    2021-11-06 07:44:28
  • JUC系列学习工具类CountDownLatch详解

    2023-10-01 12:19:23
  • 如何解决springboot读取配置文件的中文乱码问题

    2022-09-13 22:26:42
  • Android MediaPlayer实现音乐播放器实例代码

    2021-05-26 22:58:05
  • 浅谈Java之Map 按值排序 (Map sort by value)

    2021-06-20 01:23:10
  • asp之家 软件编程 m.aspxhome.com