C# String

  • `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; // falsebool 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://www.mzph.cn/diannao/26070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vAttention:用于在没有Paged Attention的情况下Serving LLM

文章目录 0x0. 前言(太长不看版)0x1. 摘要0x2. 介绍&背景0x3. 使用PagedAttention模型的问题0x3.1 需要重写注意力kernel0x3.2 在服务框架中增加冗余0x3.3 性能开销0x3.3.1 GPU上的运行时开销0x3.3.2 CPU上的运行时开销 0x4. 对LLM服务系统的洞察0x5…

自动驾驶跟驰仿真

联合仿真需求分析报告 一、项目背景 随着汽车技术的快速发展,自动驾驶和智能网联汽车已成为行业发展的重要趋势。为确保自动驾驶车辆在复杂交通环境中的安全性和可靠性,进行联合仿真测试显得尤为重要。本报告旨在明确联合仿真的具体需求,为…

Springboot结合redis实现关注推送

关注推送 Feed流的模式 Timeline:不做内容筛选,简单的按照内容发布时间排序。常用于好友与关注。例如朋友圈的时间发布排序。 优点:信息全面,不会有缺失。并且实现也相对简单 缺点:信息噪音较多,用户不一定感兴趣,内容获取效率…

佳能5DMARK IV mov视频覆盖的恢复方法

5DMARK IV算是佳能比较经典的一款摄像机,是佳能早期使用MOV的摄像机之一,MOV是当初佳能高端机的象征,当然现在佳能已经不在通过MOV和MP4来区分硬件级别了。下边这个案例是文件拍摄时断电,结果变成0字节,然后覆盖了部分…

mysql实现json数据的解析

在MySQL中,你可以使用JSON函数来解析、查询和修改JSON数据。MySQL 5.7及更高版本提供了对JSON的原生支持。 以下是一些常用的JSON函数及其用法: JSON_EXTRACT(): 从JSON文档中提取数据。 sql SELECT JSON_EXTRACT({"name": "John"…

epoll 为什么能提高网络性能

epoll⾼性能最根本的原因是,epoll 可以同时监听多个fd事件,这在很⼤程度地减少了⽆⽤的进程上下⽂切换,让进程更专注地处理⽹络请求。 其实在内核的硬、软中断上下⽂中,包从⽹卡接收过来进⾏处理,然后放到socket的接 …

oc中类都是在main执行前,加载到内存中的,正确吗?

oc中类加载 在Objective-C中,类是在程序运行时(runtime)加载到内存中的,而不是在main函数执行前。 在Objective-C中,类的加载是由运行时系统负责的。当程序启动时,Objective-C运行时系统会自动加载所有…

速度位置规划实现精确定位的问题

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

论文略读:Onthe Expressivity Role of LayerNorm in Transformers’ Attention

ACL 2023 研究了LayerNorm在 Transformers 中对注意力的作用LayerNorm为Transformer的Attention提供了两个重要的功能: 投影,projection LayerNorm 帮助 Attention 设计一个注意力查询,这样所有的Key都可以平等地访问通过将Key向量投影到同一…

端午节到了,祝大家粽子甜甜,生活美满!愿粉丝们心想事成,健康平安,阖家幸福!

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

素数不重模定理

结论 若对于正整数 a , b a,b a,b &#xff0c;其中 a , b a,b a,b 均为素数且 a ≠ b a \neq b ab&#xff0c; 则有 a k % b ( 1 ≤ k < b ) a^k\%b(1\le k<b) ak%b(1≤k<b) 这 k − 1 k-1 k−1 个数两两不同。 证明 不会

狭义人机交互与广义人机交互

人机交互&#xff08;HMI&#xff09;是指人与计算机之间的交互过程。狭义的人机交互主要关注人与计算机之间的界面设计和交互技术&#xff0c;注重用户与计算机系统之间的信息交换和控制。这种交互通常涉及图形用户界面&#xff08;GUI&#xff09;、鼠标、键盘等输入设备&…

Linux网络服务

01 Linux网络设置 02 DHCP原理与配置 03 DNS域名解析服务 04 远程访问及控制 05 部署YUM仓库及NFS共享服务 06 PXE高效批量网络装机

【Java基础】多线程开发

Java多线程编程学习笔记 Author: Jim.kk Video: Bilibili 文章目录 Java多线程编程学习笔记学习路线简介程序、进程与线程的关系JVM简介 | 多线程在JVM中的执行示例CPU 线程的调度方式多线程的意义并行与并发 创建多线程 1 | Thread 与 Runnable方式 1 | 继承 Thread 类方式 …

企业网站策划

企业网站策划是企业推广和宣传的重要组成部分&#xff0c;它不仅是企业对外传达形象和信息的平台&#xff0c;更是企业与客户、供应商、合作伙伴进行交流和互动的重要工具。好的企业网站策划不仅能够展示企业形象和产品信息&#xff0c;还能够为用户提供更好的体验&#xff0c;…

leetcode290:单词规律

题目链接&#xff1a;290. 单词规律 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool wordPattern(string pattern, string s) {unordered_map<char, string> s2t;unordered_map<string, char> t2s;int len pattern.size();int CountSpace…

Java:集合框架

1.Collection接口 collection接口是Java最基本的集合接口&#xff0c;它定义了一组允许重复的对象。它虽然不能直接创建实例&#xff0c;但是它派生了两个字接口List和Set&#xff0c;可以使用子接口的实现类创建实例。Collection 接口是抽取List接口和Set接口共同的存储特点和…

Eureka和Nacos有哪些区别?

Eureka和Nacos都能起到注册中心的作用&#xff0c;用法基本类似。但还是有一些区别的&#xff0c;例如&#xff1a; Nacos支持配置管理&#xff0c;而Eureka则不支持。 而且服务注册发现上也有区别&#xff0c;我们来做一个实验&#xff1a; 我们停止user-service服务&#x…

九种mfc140u.dll丢失的解决方法,全面解决mfc140u.dll文件丢失

mfc140u.dll是 Microsoft Visual C 2015 Redistributable 的一部分&#xff0c;它与 Microsoft 基础类库&#xff08;MFC&#xff09;的 Unicode 版本有关。当您在运行使用 Visual C 2015 开发的应用程序时&#xff0c;可能会碰到关于mfc140u.dll丢失的错误。下面列出了一些解决…

刷机维修进阶教程-----红米k30 nv损坏故障 修复实例教程步骤解析

小米红米系列机型在米8起始就有了串码校验。不得随意更改参数限制。不同于其他机型,可以任意刷入同芯片的基带qcn来修复基带和串码丢失。米系列刷入同芯片基带qcn会提示nv损坏故障。是因为有串码校验。一般在于格机或者全檫除分区后写新参数出现的故障。 这种解决方法通常有两…