关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

云南大王-C# 基础知识系列

发布时间:2020-04-16 00:00:00
0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作。 1. 创建一个字符串 这部分介绍一下如何创建一个字符串,在《C# 基础知识系列- 2 字符串》中介绍了通过初始化和简单的字符串赋值的方式创建一个字符串对象。在这里对这部分内容进行一定的补充和扩展。 1.1 Object.ToString 方法 对于C#的任意一个对象都有一个继承自Object的ToString方法,这个方法没有额外参数,返回一个字符串,在没有进行重写的前提下,该方法返回的是类全名(所谓类全名就是命名空间.类名 的表示)。 为什么需要介绍这个方法呢?因为这个方法贯穿着整个C#的字符串功能逻辑,这个方法也是用来获取一个对象的文字描述的方法。 1.2 字符串的‘加法’运算 什么是字符串的‘加法’运算? 例如: string str1 = 1 + "123";// 1123 string str2 = 2.3 + "123";//2.3123 如上述示例中描述的,类似于 ‘对象’+‘字符串’ 的形式,我把它成为‘加法’运算。 为什么叫‘加法’运算? 其实在官方并没有对这种声明方式做出明确定义,规定其命名方式。我之所以称之为‘加法’运算是因为这种方式跟数值的加法运算有很多相似的地方,比如说优先级的问题。 示例: string str1 = 1 + "1" + 123; // 11123 string str2 = 1 + 1 + "123"; // 2123 string str3 = "1" + 1 + 123; // 11123 以上三个示例,如果按照字符串连接来理解会很麻烦,比如说为什么str2里的1+1会先运算,为什么str3不是1124等。如果按照加法来理解,就很好理解了。str2 先计算1+1=2,然后又计算2 +“123”;str3 先计算 "1"+1 = "11"再计算"11"+123。 简单来讲就是,在C#中,字符串的‘加法’运算会按照正常数字的加法运算顺序进行运算。如果遇到对象+字符串的计算,则调用对象的ToString 获取对象的字符串描述,再将这个描述与字符串进行连接。 1.3 字符串的格式化 string.Format string.Format方法C#提供了很多个重载版本,这里只简单介绍一下常用的一种写法: string str = string.Format("{0}-{1}",1,2);//1-2 这个方法的参数列表可以参照: public static string Format(string format,params object[] objs); //params 关键字表示可变参数列表,后面跟一个数组的声明,表示这个参数可以是任意个,方法内按数组使用 当然,实际上并不是这个。其中format参数是一个格式化字符串,其中{、} 包裹一个数字为占位符,表示后面的objs参数里第几个参数替换到这个位置。 C#在后续的版本更新中为字符串的格式化增加了一种写法: int a = 10; double b = 10.3; string str = $"{a}{b}"; 该写法为在字符串的双引号之前使用美元符号$开始,然后用{、}包裹变量名,表示变量名替换到对应的位置。这种写法简单明了,而且不用担心占位符的数字写错导致报错。objs的数量大于5个,format的内容一旦过长很容易出现占位符数字编号标错的问题。 有一个问题,如果字符串本身包含‘{’或‘}’呢?解决方法很简单: int a = 10; double b = 10.3; string str = $"{{c}}{a}{b}";// {c}1010.3 在大括号外面再加一个相同的大括号就可以了。 这里简单的介绍一下字符串格式化另一个重要的内容,数据的格式化。用法就是在大括号包裹的占位符的后面加:,在数字或变量后面加冒号然后写格式化表达式。 数字的字符串格式化 string.Format("{0:#0.00}-{1}",1,2); // #0.00表示生成一个 带两位小数的数字字符串,不足两位用0补齐 日期的字符串格式化 DateTime date = DateTime.Now; string str = $"{date:yyyy-MM-dd}";// 2020-04-15 这里简单的介绍了一下字符串格式化的内容,更多的内容可以查看微软官方文档或者期待后续文章介绍。 2. 字符串的查找 2.1 是否是某个字符串开头或结尾 public bool StartsWith(string value); public bool EndsWith(string value); 返回字符串的开头或末尾是否与value一致。 示例: var str = "aisbjaowiue93kas"; str.StartsWith("1");// false str.StartsWith("ai");// true 2.2 是否包含某个字符串 public bool Contains(string value); 检测源字符串中是否包含一个子串,这个子串与value相等。 2.3 找一找位置 public int IndexOf(char value);//查找字符 value 在字符串中第一次出现的位置 public int IndexOf(char value, int startIndex);//查找字符串中字符 value在 startIndex之后 第一次出现的位置 public int IndexOf(string value);//查找子串 value 在字符串中第一次出现的位置 public int IndexOf(string value, int startIndex);//查找字符串中子串value在startIndex之后第一次出现的位置 以上方法还有一个相似的方法LastIndexOf,顾名思义,返回最后一次出现的位置,参数与以上方法一致。 值得注意的是,所有的下标或索引都是从0开始计算位置,如果没有找到则返回 -1。 3. 修改、分解字符串 这部分介绍一下对字符串进行修改和切割。 3.1 替换内容 public string Replace(string oldValue,string newValue); public string Replace(char oldValue,char newValue); 将字符串中的oldValue替换成newValue,如果字符串中不包含oldValue,则字符串不发生任何改变。 3.2 对字符串掐头去尾 头尾 一起操作: public string Trim();// 去掉字符串头和尾的空格 public string Trim(char trimChar);//去除字符串头和尾的 字符 trimChar public string Trim(params char[] trimChars);// 从字符串的头和尾中去除 trimChars包含的所有字符 只操作头: public string TrimStart();//去掉字符串开头的空格 public string TrimStart(char trimChar);//去掉字符串开头的字符 trimChar public string TrimStart(params char[] trimChars);// 从字符串的头去除 trimChars包含的所有字符 最后只操作尾巴: public string TrimEnd();//去掉字符串开头的空格 public string TrimEnd(char trimChar);//去掉字符串开头的字符 trimChar public string TrimEnd(params char[] trimChars);// 从字符串的头去除 trimChars包含的所有字符 这里有一个问题,对字符串的掐头去尾不能处理子串,都是以字符的形式进行处理的。尤其是 参数params char[] trimChars 的处理,需要格外注意。 3.3 大小写切换 public string ToLower();// 转换为小写字母 public string ToUpper();// 转换为大写字母 我们通常说的大小写转换是指英文字符的大小写转换,其他语言的大小写转换与对应语言设置有关。中文和数字不会发生变化,尤其是中文不会繁体化或简体化。 3.4 分解字符串 public string[] Split(char separator, StringSplitOptions options = StringSplitOptions.None); public string[] Split(string separator, StringSplitOptions options = StringSplitOptions.None); 以上两个方法都会将字符串分解成一个字符串数组,其中分隔符就是separator。 以上是字符串本身自带的一些方法,下一篇将会介绍String类的一些公共方法,这两篇内容构成了C#的字符串部分。 更多内容烦请关注我的博客

相关阅读

centos7系统中忘记了root管理员账号密码的解决方式公司管理必须的20条军规[参考]云南昆明天猫旗舰店如何开_怎么开_要什么条件云南大王-通俗理解spring源码(三)—— 获取xml的验证模式 云南大王-用户登录 云南大王-【Golang进阶】指针的详细讲解 云南大王-Java 单线程代码ThreadLocal串值问题 云南大王-Java 实例级别的锁和类级别的锁 云南大王-工作流引擎会签,加签,主持人,组长模式专题讲解 云南大王-Android连载5云南大王-NTP对时器(NTP对时服务器)重要性!京准电子科技 云南大王-关于redis单线程的分析 云南大王-CVE云南大王-PHP SESSION反序列化本地样例分析 云南大王-这不就是多线程ThreadPoolExecutor和阻塞队列吗 云南大王-Tomcat AJP 文件包含漏洞(CVE云南大王-讲真,这两款idea插件,能治愈你英语不好的病 云南大王-消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型? 云南大王-JVM系列十三(类加载器). 云南大王-Win10安装MySQL8压缩包版 云南大王-初始WebApi(2) 云南大王-初识人工智能(二):机器学习(一):sklearn特征抽取 云南大王-Popup中ListBox的SelectChange事件关闭弹出窗体后主窗体点击无效BUG 云南大王-基础知识记录 云南大王-FastDFS搭建图片服务器 云南大王-git/sourcetree解决本地仓库历史合并到线上仓的历史数据合并问题_refusing to merge unrelated histories 云南大王-js判断字符是否在数组中【转】 云南大王-Python 云南大王-面向对象之多线程(可捎带电梯调度) 云南大王-Python练习题2.5求奇数分之一序列前N项和(存在问题) 云南大王-React 中的前端路由 react云南大王-VSCODE 远程开发树莓派 云南大王-React新闻网站云南大王-vs .net CS0006 C# 未能找到元数据文件 .dll 云南大王-Vue.js 技术揭秘 云南大王-流程控制语句云南大王-Python学习笔记:Python的时间操作(time,datetime,timedelta,calendar) 云南大王-流程控制语句云南大王-golang Gin framework with websocket 云南大王-多重判断if..else嵌套语句 云南大王-用户登录 云南大王-流程控制语句云南大王-密码类 云南大王-Unity2018发布WebGL注意事项总结 云南大王-web系统安全运营之基础云南大王- 流程控制语句云南大王-中型WPF客户端开发项目总结(3.3.4) 云南大王-流程控制语句云南大王-流程控制语句云南大王-流程控制语句云南大王-中型WPF客户端开发项目总结(4) 云南大王-流程控制语句云南大王-ASP.NET Core笔记(4) 云南大王-C# 基础知识系列云南大王-让 .NET 轻松构建中间件模式代码(二) 云南大王-基于 HTML5 WebGL 的 水泥工厂可视化系统 云南大王-.NET Core 3 WPF MVVM框架 Prism系列之导航系统 云南大王-《JavaScript异步编程》精读笔记 云南大王-合理使用CSS框架,加速UI设计进程 云南大王-CLSID 为 {000209FF云南大王-从零基础转行到前端大牛,需要经过哪几个阶段? 云南大王-一个简单的例子看明白 async await Task 云南大王-【目前】宇宙第一IDE Visual Studio 合并压缩css、js扩展组件云南大王-写一个通用的List集合导出excel的通用方法 云南大王-Bootstrap4 按钮组+徽章(Badges)+进度条+分页+列表组 云南大王-Web前端工程师需要学些什么? 云南大王-react嵌套路由 云南大王-【java框架】Struts2(2) 云南大王-javaSE笔记云南大王-.net core 集成 sentry 进行异常报警 云南大王-Java の 四种引用 云南大王-JVM 虚拟机&&类加载(一) 云南大王-使用Fastjson实现JSON与JavaBean之间互相转换 云南大王-Python操作Oracle数据库:cx_Oracle 云南大王-为什么要用内插字符串代替string.format 云南大王-作为字节跳动的面试官,有些话我不得不说! 云南大王-微信公众号自定义菜单与启用服务器配置冲突(图文消息、链接及文本回复) 云南大王-C#队列学习笔记:RabbitMQ延迟队列 云南大王-Disruptor 基础篇 云南大王-C#获取设备(Audio和Video)名称 简单整理 云南大王-基于注解的IOC配置 云南大王-C#调用EnumDevice获取设备信息 云南大王-Jenkins基础系统之更换镜像源 云南大王-Jenkins基础系统之完整的.net项目编译 云南大王-Scala学习系列(二)——环境安装配置 云南大王-WinForm中DataGridView复制选中单元格内容解决方案 云南大王-关键词匹配优化(第0篇)—— 问题和思路 云南大王-ASP.NET CORE WEBAPI文件下载 云南大王-GC垃圾回收器 云南大王-多线程之旅(Task 任务) 云南大王-当模板方法遇到了委托函数,你的代码又可以精简了 云南大王-基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇) 云南大王-关键词匹配优化(第1篇)—— 测试计算过程 云南大王-原理解密 → Spring AOP 实现动态数据源(读写分离),底层原理是什么 云南大王-Navicat 密码加密算法 云南大王-【WPF学习】第六十六章 支持可视化状态 云南大王-composer安装 windows 云南大王-ASP.NET Core中的Controller 云南大王-HttpClient来自官方的JSON扩展方法 云南大王-Python3标准库:http.cookies HTTP cookie
/template/Home/Zkeys/PC/Static