C#字符串 入门学习

C# string
在这里插入图片描述

1.string基本操作

string 是 System.String 在 .NET 中的别名。
string s0 = “hello”;
string s2 = “hello \n”;转义符

s0.Length 长度属性
s0[0]=‘h’; s[1]=‘e’;…索引从零开始从左往右
string 可以 foreach 遍历
string.Empty string 等效于"" (不同于null)
string str1 = @“C:\PublicDocuments\Report1.doc”; 逐字字符串
string str2 = $“{ s0} world”; -> hello world 内插字符串

char[] chars = { ‘w’, ‘o’, ‘r’, ‘d’ };
string string1 = new string(chars); ->word 实例化
string string2 = new string(‘c’, 20); -> cccccccccccccccccccc
string string3 = "This is one sentence. " + "This is a second. ";

2.格式化字符串

标准数字格式说明符

int i = -16325;
string s1 = i.ToString("D8",en-US);
string s2 = string.Format("{0:D8}",i);
string s3 = $"{ i:D8}";
string s4 = i.ToString("N1", CultureInfo.CreateSpecificCulture("en-us"));

-> -00016325

255 (b16) -> 0000000011111111 转2进制
-123.4 (“C3”, ja-JP) -> -¥123.400 货币
-1234 (“D6”) -> -001234 十进制
-1052.0329112756 (“e2”, en-US) -> -1.05e+003
-1234.56 (“F4”, en-US) -> -1234.5600 小数点后位数
123.4546 (“G4”, en-US) -> 123.5 小数总位数
-1234.56 (“N3”, en-US) -> -1,234.560
-0.39678 (“P1”, en-US) -> -39.7 % 百分比
255 (“X”) -> FF 十六进制
自定义数字格式字符串
1234.5678 (“00000.0”) -> 01234.5
1234.5678 (“#####”) -> 1235
0.45678 (“#.##”, en-US) -> .46
2147483647 (“##,#”, en-US) -> 2,147,483,647 分隔符
0.3697 (“%#0.00”, en-US) -> %36.97
0.3697 (“##.0 %”, en-US) -> 37.0 %
987654 ("\###00\#") -> #987654# 转义
68 (“# ‘degrees’”) -> 68 degrees 加单位
0 ("#0.0#;(#0.0#)") -> 0.0(部分分隔符;)
标准日期和时间格式字符串
string s = DateTime.Now.ToString(); ->2023/7/18 14:22:28
string s = DateTime.Now.ToString(“d”); ->2023/7/18
string s = DateTime.Now.ToString(“D”); ->2023年7月18日
string s = DateTime.Now.ToString(“f”); ->2023年7月18日 14:24
string s = DateTime.Now.ToString(“F”); ->2023年7月18日 14:24:09
string s = DateTime.Now.ToString(“G”); ->2023/7/18 14:22:28
string s = DateTime.Now.ToString(“g”); ->2023/7/18
string s = DateTime.Now.ToString(“M”); ->7月18日
string s = DateTime.Now.ToString(“m”); ->7月18日
string s = DateTime.Now.ToString(“O”); ->2023-07-18T14:30:35.0000000
string s = DateTime.Now.ToString(“o”); ->2023-07-18T14:30:35.0000000
string s = DateTime.Now.ToString(“R”); ->Tue, 18 Jul 2023 14:30:35 GMT
string s = DateTime.Now.ToString(“r”); ->Tue, 18 Jul 2023 14:30:35 GMT
string s = DateTime.Now.ToString(“T”); ->14:30:35
string s = DateTime.Now.ToString(“t”); ->14:30
string s = DateTime.Now.ToString(“U”); ->2023年7月18日 6:30:35通用可排序日期/时间模式。
string s = DateTime.Now.ToString(“u”); ->2023-07-18 14:30:35Z
string s = DateTime.Now.ToString(“Y”); ->2023年7月
string s = DateTime.Now.ToString(“y”); ->2023年7月
自定义日期和时间格式字符串
string s = DateTime.Now.ToString(“MMMM dd, yyyy”); ->七月 18, 2023
string s = DateTime.Now.ToString(“0:MM/dd/yy H:mm:ss zzz”); ->0:07/18/23 14:30:35 +08:00
“d” 一个月中的某一天(1 到 31)。
“dd” 一个月中的某一天(01 到 31)。
“ddd” 一周中某天的缩写名称。
“dddd” 一周中某天的完整名称。
… …
TimeSpan时间间隔
TimeSpan ts = new TimeSpan(1,12,30,30);//1天12时30分30秒
string s =ts.ToString( );->1.12:30:30

3. System.String 类中的方法

String.Concat 将一个或多个子字符串合并到单个字符串中。
String.Join 将一个或多个子字符串连接到单个元素中,并在每个子字符串之间添加分隔符。
String.Insert 通过将一个字符串插入现有字符串的指定索引处生成新字符串。
string s = “+++abc***”.Trim(); ->+++abc*** 去除字符串首尾指定字符
string s1 = "+++abc***".Trim(new char[] { '+','*'}); ->abc
String.TrimStart
String.TrimEnd
String.CopyTo
String.Remove(startindex,count) 删除
s.PadRight(15,‘X’);->+++abc*** XXXXXX 填充
Compare(StrA, StrB)比较排序返回一个指示二者在排序顺序中的相对位置的整数。小于零则strA 在排序顺序中位于 strB 之前。
StringComparer 类 字符串比较。

字符串比较和排序的约定因区域性而异。 例如,排序顺序可能基于拼音或字符的视觉表示形式。 在东亚语言中,按文字的笔画和部首对字符进行排序。

String.StartsWith 确定字符串是否以传递字的符串开头。 返回一个布尔值。
String.EndsWith
String.Contains 确定一个字符或字符串是否出现在另一个字符串中。 返回一个布尔值。包含
String.Equals 确定两个字符串是否相同。 返回一个布尔值。
String.ToUpper 将字符串中的所有字符均转换为大写
String.ToLower
“You win some. You lose some.”.Split()->string[]{”you“,…} 拆分默认按空格。
Split(Char[]) 按指定字符拆分。
复杂的匹配使用正则表达式
Int32.Parse(value)转换(否则报错)
Int32.TryParse(str)(否则返回false)
var parsedDate = DateTime.Parse(dateInput);日期时间转换
Convert****转换
decimal ToDecimal(String)
float ToSingle(String)
double ToDouble(String)
short ToInt16(String)
int ToInt32(String)
long ToInt64(String)
ushort ToUInt16(String)
uint ToUInt32(String)
ulong ToUInt64(String)

4. System.Text.StringBuilder 类

每次使用 System.String 类中的方法之一,都要在内存中新建字符串对象,这就需要为新对象分配新空间。例如,如果在循环中将许多字符串连接在一起,使用 StringBuilder 类可以提升性能。指定容量,当达到容量时,将自动分配新的空间且容量翻倍。
StringBuilder myStringBuilder = new StringBuilder(“Hello World!”, 25);
StringBuilder.Append 将信息追加到当前 StringBuilder 的末尾。
StringBuilder.Insert
StringBuilder.remove
StringBuilder.replace

5. 编码

C#String中 的 char 由对应于 Char 值的 UTF-16 编码代码单元表示。
string 在逻辑上是一个 16 位值的序列,其中每个值都是 char 结构的实例。
string.Length 属性返回 string 实例中 char 实例的数目。
Unicode 码位
U+0000…U+FFFF 范围内的基本多语言平面 (BMP)。 这个 16 位范围提供 65,536 个码位,足以涵盖世界上大多数编写系统。
U+10000…U+10FFFF 范围内的补充码位。 这个 21 位范围提供了超过一百万个额外的码位,可用于不太知名的语言和其他用途,例如表情符号
在这里插入图片描述

编码器和解码器
.NET 中的所有字符编码类都继承自 System.Text.Encoding 类,这是定义所有字符编码通用功能的抽象类。 若要访问在 .NET 中实现的单个编码对象,请执行以下操作:

  • 使用 Encoding 类的静态属性,这些属性返回表示 .NET 标准字符编码(ASCII、UTF-7、UTF-8、UTF-16 和 UTF-32)的对象。 例如, Encoding.Unicode 属性返回 UnicodeEncoding 对象。 每个对象都使用替换回退处理不能进行编码的字符串和不能进行解码的字节。
  • 调用编码的类构造函数。 以这种方式可以将 ASCII、utf-7、utf-8、utf-16 和 utf-32 编码对象实例化。 默认情况下,每个对象都使用替换回退处理不能进行编码的字符串和不能进行解码的字节,但你可指定应引发异常。
  • 调用 Encoding(Int32) 构造函数并向其传递一个表示编码的整数。 标准编码对象使用替换回退,代码页编码和双字节字符集 (DBCS) 编码对象使用最佳回退处理不能进行编码的字符串和不能进行解码的字节。
  • 调用 Encoding.GetEncoding 方法,此方法返回 .NET 中的任何标准编码、代码页编码或 DBCS 编码。 可通过重载同时指定编码器和解码器的回退对象。

如果有机会选择应用程序要使用的编码,则应使用 Unicode 编码,最好是 UTF8Encoding (等效于ASCIIEncoding)或 UnicodeEncoding(UTF16)。
调用 Encoding.GetBytes 方法。 如果想要在执行编码前确定需要多少个字节来存储编码字符,可调用 GetByteCount 方法。

6. 装箱和拆箱(取消装箱)

string 为引用类型
装箱是将值类型转换为 object 类型,将其存储在托管堆中。
取消装箱将从 object 中提取值类型。
装箱是隐式的;取消装箱是显式的。
相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。

int i = 123;      // a value type 值类型
string str = "456";  // a reference type  引用类型
Convert.ToInt32(str);  // boxing 装箱
i.ToString();   // unboxing 拆箱

string 对象是“不可变的”:它们在创建后无法更改。 String 方法和 C# 运算符看起来是在修改字符串,实际上都是在新的 string 对象中返回结果。 在下面的示例中,当 s1 和 s2 的内容被串联在一起以形成单个字符串时,两个原始字符串没有被修改。 += 运算符创建一个新的字符串,其中包含组合的内容。 这个新对象被分配给变量 s1,而分配给 s1 的原始对象被释放,以供垃圾回收,因为没有任何其他变量包含对它的引用。

string s1 = "A string is more ";
string s2 = "than the sum of its chars.";

// Concatenate s1 and s2. This actually creates a new
// string object and stores it in s1, releasing the
// reference to the original object.
s1 += s2;

System.Console.WriteLine(s1);
// Output: A string is more than the sum of its chars.

7. null 和 “”(String.Empty)

已声明但尚未分配值的字符串为 null。 尝试在 null 字符串上调用方法会 NullReferenceException引发 。
null 字符串不同于空字符串,空字符串是(已赋值)值为“”或 String.Empty的字符串。
String.IsNullOrEmpty(String) 判断是 null 还是空字符串 (“”)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值