C# String

news/2024/7/5 7:24:56

  • `String`
    • 字符串字面量
    • 字符串连接
    • 字符串是不可变的
    • 字符串比较
    • 字符串方法
    • 字符串插值
    • 字符串和字符数组
    • 字符串格式化
    • 空字符串和 null
    • 字符串的安全性
    • 正则表达式
  • 注意
  • `String.Format`
    • 基本语法
      • 参数
    • 基本使用
      • 使用索引
      • 指定对齐和宽度
      • 使用格式字符串
      • 组合使用
    • 总结

C# String

C#中,String 类型是一个非常常用的数据类型,用于表示文本数据。它是 System.String 类的一个实例,位于 System 命名空间中。以下是一些关于C#String 类型的基本操作和特性:

String

字符串字面量

字符串可以通过双引号 " 来定义:

string greeting = "Hello, World!";

字符串连接

可以使用 + 运算符来连接字符串:

string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName; // "John Doe"

或者使用 String.Concat 方法:

string fullName = String.Concat(firstName, " ", lastName);

字符串是不可变的

C#中的字符串是不可变的,这意味着一旦一个字符串被创建,它的内容就不能被改变。任何修改字符串的操作都会创建一个新的字符串实例。

string original = "Hello";
string modified = original.Substring(0, 5); // "Hello"
original = modified.ToUpper(); // "HELLO"
// original 被修改了,但 modified 保持不变

字符串比较

区分大小写:默认的字符串比较是区分大小写的。可以使用 ==!= 运算符来比较两个字符串的值是否相等。
不区分大小写:使用 String.CompareString.Equals 方法,并指定StringComparison.OrdinalIgnoreCase

string a = "hello";
string b = "Hello";
bool areEqual = a == b; // false

bool areEqualIgnoreCase = 
	String.Equals(a, b, StringComparison.OrdinalIgnoreCase); // true

字符串方法

String 类提供了许多有用的方法来操作字符串,例如:

  • LengthLength 属性来获取字符串的长度。
  • Substring 来获取字符串的一部分。
  • IndexOf 来查找子字符串的位置。
  • Replace 来替换字符串中的字符或子字符串。
  • ToLowerToUpper 来转换字符串的大小写。
  • Trim 来去除字符串两端的空白字符。

字符串插值

C# 6.0 引入了字符串插值功能,它允许你在字符串中直接插入变量:

string name = "Alice";
string message = $"Hello, {name}!";

字符串和字符数组

字符串可以转换为字符数组,反之亦然:

string text = "Sample";
char[] charArray = text.ToCharArray();

string fromCharArray = new String(charArray);

字符串格式化

  • 字符串插值:使用 ${}String.Format
  • 复合格式:使用 String.Format 来格式化数字和其他类型。
string formatted = String.Format("The value is {0}.", 42);
// 或者使用字符串插值
string formatted = $"The value is {42}.";

空字符串和 null

空字符串("")与 null 字符串是不同的。空字符串是一个长度为0的字符串,而 null 表示没有引用任何对象。

字符串的安全性

  • 避免注入:在处理用户输入时,确保进行适当的清理和验证。
  • 编码和解码:使用 System.Text.Encoding 类来处理字符串的编码和解码。

正则表达式

使用 System.Text.RegularExpressions.Regex 类:进行复杂的字符串匹配和替换。


注意

  • 避免不必要的字符串连接:因为字符串是不可变的,频繁的连接操作会创建多个临时字符串对象。
  • 使用 StringBuilder:对于大量字符串操作,使用 StringBuilder 来提高性能。StringBuilderString使用相同。
    使用 StringBuilder 比使用 + 运算符连接字符串要高效得多,因为它避免了在每次迭代中创建新的字符串对象。
  • StringBuilder 是线程安全的,但是 Append 方法不是线程安全的。如果你在多线程环境中使用 StringBuilder,需要自己管理线程同步。
    StringBuilderCapacity 属性可以设置其最大容量,但通常不需要手动设置,因为 StringBuilder 会自动调整容量。

String.Format

String.FormatC# 中的一个非常有用的字符串方法,它允许你创建一个格式化的字符串,其中包含零个或多个占位符,这些占位符由后续参数的值替换。这个方法提供了一种灵活的方式来构建包含变量或表达式的字符串。

基本语法

String.Format(string format, object arg0 [, object arg1, ...])

参数

format:一个字符串,包含零个或多个由花括号 {} 包围的占位符。这些占位符的形式可以是 {index[,alignment][:formatString]}
index 是参数的索引,从0开始。
alignment 是可选的,表示占位符的宽度和对齐方式。
formatString 是可选的,表示格式信息,如数字格式、日期格式等。
arg0argN:是要插入到格式化字符串中的参数。
示例
下面是一些使用 String.Format 的示例:

基本使用

string name = "Alice";
int age = 30;
string message = String.Format("Hello, {0}. You are {1} years old.", name, age);
// message 的内容将是 "Hello, Alice. You are 30 years old."

使用索引

string message = String.Format("Hello, {1} and {0}.", "Alice", "Bob");
// message 的内容将是 "Hello, Bob and Alice."

指定对齐和宽度

string message = String.Format("Hello, {0,10}. You are {1,5} years old.", name, age);
// "Alice" 将右对齐并占据至少10个字符的宽度,"30" 将占据至少5个字符的宽度

使用格式字符串

DateTime date = DateTime.Now;
string formattedDate = String.Format("Today is {0:dddd, MMMM dd, yyyy}", date);
// 格式化日期,例如 "Today is Monday, April 03, 2023"

组合使用

string message = String.Format("Hello, {0}. Your balance is {1,10:C}.", name, 123456.78);
// "Alice" 后面跟着一个至少10个字符宽度的货币格式的余额

总结

String.Format 是一个非常强大的工具,可以用来创建具有复杂格式要求的字符串。它在需要将变量插入到字符串模板中时特别有用,例如在生成报告、日志消息或用户界面文本时。


http://lihuaxi.xjx100.cn/news/2215819.html

相关文章

Elasticsearch 8.1官网文档梳理 - 十一、Ingest pipelines(管道)

Ingest pipelines 管道(Ingest pipelines)可让让数据在写入前进行常见的转换。例如可以利用管道删除文档(doc)的字段、或从文本中提取数据、丰富文档(doc)的字段等其他操作。 管道(Ingest pip…

牛客小白月赛96 D 最小连通代价

题目在这里 题意: 加边是所有点连通,没有重边和自环,问最小代价 加边规则:两点权值奇偶性相同代价为a,否则为b − 100 ≤ a , b ≤ 100 -100\leq a,b \leq100 −100≤a,b≤100 分析: 这题就是一个分类讨论,先读进来统计奇数点和偶数点 记 …

Temu跨境电商按关键字搜索Temu商品API的应用及接口请求示例

Temu跨境电商按关键字搜索Temu商品API的应用场景 Temu跨境电商平台按关键字搜索Temu商品API的主要应用场景包括但不限于以下几个方面: 用户搜索商品:当用户在Temu平台上输入关键字搜索商品时,API会根据输入的关键字返回与之相关的商品列表&a…

Spring框架的原理及应用详解(五)

本系列文章简介: 在当今的软件开发世界中,随着应用复杂性的不断增加和技术的快速发展,传统的编程方式已经难以满足快速迭代、高可扩展性和易于维护的需求。为此,开发者们一直在寻求更加高效、灵活且易于管理的开发框架&#xff0c…

【杂记-浅谈以太网IP数据帧】

一、以太网数据帧 以太网数据帧是网络通信的基础单元,遵循IEEE 802.3标准,用于在以太网中传输数据。一个典型的以太网数据帧包括前导码、帧开始符、目的MAC地址、源MAC地址、类型或长度字段、数据载荷和帧校验序列。其中,类型字段指明了上层…

Scala网络编程:代理设置与Curl库应用实例

在网络编程的世界里,Scala以其强大的并发模型和函数式编程特性,成为了开发者的得力助手。然而,网络请求往往需要通过代理服务器进行,以满足企业安全策略或访问控制的需求。本文将深入探讨如何在Scala中使用Curl库进行网络编程&…

SpringBoot如何自定义启动Banner 以及自定义启动项目控制台输出信息 类似于若依启动大佛 制作教程

前言 Spring Boot 项目启动时会在控制台打印出一个 banner,下面演示如何定制这个 banner。 若依也会有相应的启动动画 _ooOoo_o8888888o88" . "88(| -_- |)O\ /O____/---\____. \\| |// ./ \\||| : |||// \/ _||||| -:- |||||- \| | \\…

嵌入式实训day5

1、 from machine import Pin import time # 定义按键引脚控制对象 key1 Pin(27,Pin.IN, Pin.PULL UP) key2 Pin(26,Pin.IN, Pin.PULL UP)led1 Pin(15,Pin.ouT, value0) led2 Pin(2,Pin.ouT, value0) led3 Pin(0,Pin.ouT, value0) # 定义key1按键中断处理函数 def key1 ir…