测绘程序设计|C#字符串及其操作|分割|取子串|格式化数值|StringBuilder类

由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~
简单介绍了C#字符串分割、取子串、拼接、格式化数值以及StringBuilder类,拿捏测绘程序设计大赛~
🌿前言
字符串的操作是测绘程序设计大赛的重点,本文根据笔者经验分享了字符串的分割、取子串、拼接,以及最重要的格式化数值操作,最后提到了StringBuilder类的AppendLine方法在测绘程序设计大赛中的妙用。
🍀字符串的分割
字符串的分割意思是:将一个字符串变量按照某个字符分割开得到一个字符串数组,也叫裂开、分隔🤣反正就和方言一样说法不一罢了。
例如:将一个字符串例如"测绘,遥感,地信,自环"
按照逗号进行split(分割),得到一个字符串数组["测绘", "遥感", "地信", "自环"]
。在C#中,字符串提供有Split方法(函数,在类中笔者很习惯叫方法,形如xxx.Split())来实现这个过程。
string myString = "测绘,遥感,地信,自环";// 按照逗号分割字符串
//string[] stringArray = myString.Split(new char[] { ',' });
string[] stringArray = myString.Split(','); //简写方式(适合比赛)// 使用foreach循环打印
foreach (string s in stringArray)
{Console.WriteLine(s);
}Console.ReadKey();
- 核心语句
string[] stringArray = myString.Split(',');
Split方法可以将字符串按照指定字符分割成字符串数组。如果需要分割的字符串是按照空格或者分号间隔的,只需稍加改动即可。不仅如此,如果将myString.Split(',')
改为myString.Split(',', ';')
,还会同时按照逗号和分号来分割字符串,读者可以自行尝试。
字符串分割是测绘程序设计大赛读取数据文件时经常会用到。例如2024年测绘程序设计大赛数据就是一个很经典的例子。
🌸字符串取子串
字符串的子串,是指从一个字符串A内截取一段连续的字符得到新的字符串B,则字符串B就是字符串A的子串。例如:字符串测神州经纬
就是字符串测神州经纬,绘祖国蓝图!
的一个子串。从字符串A中截取产生新的字符串B的动作就是字符串取子串。C#中,Substring方法可以实现这个过程。
string s = "测神州经纬,绘祖国蓝图!";
string s1 = s.Substring(0, 6); //从位置0开始向后取6位,包括位置0
string s2 = s.Substring(6);//从索引6(绘)位置开始到结束,包括索引6
Console.WriteLine(s1);
Console.WriteLine(s2);
//这里使用Join函数可以将字符串数组重新组合成字符。
Console.WriteLine(string.Join("", new string[] { s1, s2 }));Console.ReadKey();
-
核心语句
string s1 = s.Substring(0,6); //从位置0开始向后取6位,包括位置0
-
核心语句
string s2=s.Substring(6);//从索引6(绘)位置开始到结束,包括索引6
Substring只需要指定子串的起始索引和子串长度(包括起始位置在内)即可实现取子串;如果只传入一个数字而不传入子串长度,则会从当前位置取到结束。
需要注意的是:C#中字符串、数组都是从0开始索引。而在Matlab中,字符串索引从1开始,所以经常编写Matlab代码的参赛选手需要稍加注意。
在测绘程序设计大赛中,字符串取子串通常用来读取星历文件,例如李英冰老师的《测绘程序设计》教材中电离层改正计算章节的数据文件读取。
🌱字符串拼接
字符串拼接很好理解:两个字符串按照先后顺序拼接在一起组成一个新的字符串的过程。字符串拼接的方法很多,这里笔者仅介绍种常用的方法。
1.可以使用加法运算符直接拼接字符串:
string a = "Hello";
string b = "C#";
string c = "I'm little y";
//直接相加,连接成新的字符串
string result = a + " " + b + "\n" + c;
Console.WriteLine(result);
2.但是笔者更推荐使用美元符号$:
string a = "Hello";
string b = "C#";
string c = "I'm little y";
//双引号前加$符号,{}类填变量名
string result = $"{a} {b}\n{c}";
Console.WriteLine(result);
🌴格式化数值
格式化数值,笔者也不知道是哪里冒出来的这个词😂。其大致意思就是说对数字进行保留两位小数、保留三位有效数字等等这种,保留完后的类型是字符串。此处仅说明常用的保留小数位的方法。
1.使用stringFormat()函数
double a = 3.14;
//使用零占位符0和数字占位符#
Console.WriteLine(string.Format("{0:00.###}", a));//03.14
Console.WriteLine(string.Format("{0:00.000}", a));//03.140Console.ReadKey();
零占位符就是说这个位置默认值是0,如果有数字,则变成相应的数字。数字占位符所在位置如果有数字则为数字,否则不存放任何值。变量名后跟冒号,冒号之后写格式要求。
2.笔者还是推荐使用美元符号$
double a = 3.14;
//使用零占位符0和数字占位符#
Console.WriteLine($"{a:00.###}");//03.14
Console.WriteLine($"{a:00.000}");//03.140Console.ReadKey();
3.比赛推荐:
在比赛时,通常要求最后的结果保留几位小数,如果是保留八位小数,则按照上述方法需要敲至少八个0,就不是很方便。笔者推荐使用’Fn’的方式。F即可以理解为float。F0就是保留0位小数。
double a = 3.14;
//使用Fn的方式,F0表示保留0位小数,F也可以小写f
Console.WriteLine($"{a:F0}");//3
Console.WriteLine($"{a:f3}");//3.14Console.ReadKey();
需要注意的是,这种小数取位方式可能是四舍五入、也有可能直接是去尾法、亦或是其他方法,不同的编程语言还不太一样。
但对于测绘程序设计大赛而言,最终的评分是将你计算的结果与参考值作差,就像浮点数判断是否相等那样,来确定答案正确与否。且大部分参赛选手也都是这么写法、《测绘程序设计》教材参考代码也是这种写法,所以该写法问题并不大。具体可以赛前再与比赛举办方交流沟通~
🌳其他字符串方法
Trim()
对于其他字符串方法,笔者暂时能想到的会用得上的也就Trim。Trim释义有修剪、整洁的意思,实际效果就是去除字符串首尾空格。在读取字符串结束后,做一遍Trim是一种好习惯,可以提高程序的容错性。
string myString = " 太棒啦! ";
Console.WriteLine(myString);
string trimString= myString.Trim();
Console.WriteLine(trimString);Console.ReadKey();
通过断点调试,可以在局部变量窗口看到Trim的效果:去除字符串首尾空格。
🍂StringBuilder类
String是不可变的类型,在做字符串拼接等操作时,都是产生一个新的字符串。StringBuilder类的内容是可变的,在进行字符串的一些操作时会*相对高效**。
而笔者想要的,不是StringBuilder的效率,而是StringBuilder的换行符。StringBuilder类有很多的方法,比如Append、AppendLine、Insert、Remove、Replace…等等,笔者仅展示AppendLine(增加一行内容)的用法。
在没有了解StringBuilder类之前,笔者在组织测绘程序设计报告内容部分时一直使用\n
来进行换行操作。
//传统换行符编写报告
string temp = "序号,说明,计算结果\n";
temp += "1,xxx,xxx\n";
temp += "2,yyy,yyy\n";
string report = temp;Console.WriteLine(report);
Console.ReadKey();
在学会使用StringBuilder类以后,觉得还是StringBuilder会相对方便一些。
//StringBuilder编写报告
StringBuilder sb = new StringBuilder();
sb.AppendLine("序号,说明,计算结果");
sb.AppendLine("1,xxx,xxx");
sb.AppendLine("2,yyy,yyy");string report = sb.ToString();Console.WriteLine(report);
Console.ReadKey();
使用AppenLine时,会自动在字符串尾部追加一个换行符\n
,在比赛紧张场景下,漏掉换行符是笔者常有之事🤣(符号太多啦看不过来,不知道读者是不是也和笔者一样~),使用AppenLine会好很多。
🌹结语
-
关于字符串还有许多其他的知识,比如@符号、字符串的比较、字符串包含与被包含关系等等,因篇幅有限且测绘程序设计大赛用的较少,读者可自行查看微软官方文档:https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/best-practices-strings
-
微软官方文档介绍StringBuilder类:https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/stringbuilder
-
笔者为测绘遥感方向的学习者,愿意结交志同道合的伙伴,欢迎关注公众号与笔者一起交流学习~
-
路虽远,行则将至;事虽难,做则必成。希望认真学习的你能够有所收获~
-
本公众号的原创成果,在未经允许的情况下,请勿用于任何商业用途!
-
如果本文有幸可以帮到您,欢迎您的点赞👍、收藏⭐与关注❤;您的点赞👍、收藏⭐与关注❤是我创作的最大动力~
相关文章:

测绘程序设计|C#字符串及其操作|分割|取子串|格式化数值|StringBuilder类
由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~ 简单介绍了C#字符串分割、取子串、拼接、格式化数值以及StringBuilder类,拿捏测绘程序设计大赛~ 🌿前言 字…...
自然语言处理——Hugging Face 详解
Hugging Face 是一个以自然语言处理(NLP)为核心的人工智能平台和开源社区,提供了一系列非常流行的机器学习工具和预训练模型,尤其在文本生成、分类、翻译、情感分析等任务中表现出色。Hugging Face 旗下最为著名的项目是 Transfor…...

本地保存mysql凭据实现免密登录mysql
本地保存mysql凭据 mysql加密登录文件简介加密保存mysql用户的密码到本地凭据 mysql加密登录文件简介 要在 mysql客户端 上连接 MySQL 而无需在命令提示符上输入用户名和口令,下列三个位置可用于存储用户的mysql 凭证来满足此要求。 配置文件my.cnf或my.ini /etc…...

Ubuntu 22 安装 Apache Doris 3.0.3 笔记
Ubuntu 22 安装 Apache Doris 3.0.3 笔记 1. 环境准备 Doris 需要 Java 17 作为运行环境,所以首先需要安装 Java 17。 sudo apt-get install openjdk-17-jdk -y sudo update-alternatives --config java在安装 Java 17 后,可以通过 sudo update-alter…...

构建智能防线 灵途科技光电感知助力轨交全向安全防护
10月27日,在南京南站至紫金山东站间的高铁联络线上,一头野猪侵入轨道,与D5515次列车相撞,导致设备故障停车。 事故不仅造成南京南站部分列车晚点,还在故障排查过程中导致随车机械师因被邻线限速通过的列车碰撞而不幸身…...

【go从零单排】泛型(Generics)、链表
🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在Go语言中,泛型(Generics)允许你编写可以处理…...

IoTDB 与 HBase 对比详解:架构、功能与性能
五大方向,洞悉 IoTDB 与 HBase 的详尽对比! 在物联网(IoT)领域,数据的采集、存储和分析是确保系统高效运行和决策准确的重要环节。随着物联网设备数量的增加和数据量的爆炸式增长,开发者和决策者们需要选择…...

推荐一款ETCD桌面客户端——Etcd Workbench
Etcd Workbench 我相信很多人在开始管理ETCD的时候都去搜了Etcd客户端工具,然后找到了官方的Etcd Manager,但用完之后发现它并不好用,还不支持多连接和代码格式化,并且已经好几年不更新了,于是市面上就有了好多其他客…...

01 Oracle 数据库存储结构深度解析:从数据文件到性能优化的全链路探究
文章目录 Oracle 数据库存储结构深度解析:从数据文件到性能优化的全链路探究一、Oracle存储结构的物理层次1.1 控制文件(Control File)1.2 联机重做日志文件(Online Redo Log File)1.3 数据文件(Data File&…...

AI教育革命:个性化学习的新篇章
内容概要 在 教育 领域,人工智能 的崭露头角带来了前所未有的变化。如今,个性化学习 已不再是一个遥不可及的梦想,而是通过 AI 技术真正实现的可能。借助先进的数据分析能力,教师可以实时跟踪和评估每位学生的学习进度࿰…...

【网络原理】万字详解 UDP 和 TCP
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. UDP1.1 UDP 报文格式1.1.1 源端口/目的端口1.1.2 报文长度1.1.3 校验和 2. TCP2.1 TCP 报文结构2.2 TCP 特…...

从零开始搭建Halo个人博客
前言 老话说得好,好记性不如烂笔头。对于程序员来说,学无止境,需要学习的东西很多,而如果不记录下来可能过不了多久就忘记了,而记录下来这一步也能很好地贯彻费曼学习法。 其实网上有很多博客平台,但是自…...

AMD显卡低负载看视频掉驱动(chrome edge浏览器) 高负载玩游戏却稳定 解决方法——关闭MPO
2024.11.9更新 开关mpo ulps 感觉有用但是还是掉驱动,现在确定是window顶驱动问题 按网上的改注册表和组策略会让自己也打不上驱动 目前感觉最好的办法就是,重置此电脑,然后你就摆着电脑挂个十分钟半小时别动,一开始他是不显示…...

数据结构——二叉树(续集)
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人…...

ElasticSearch学习篇16_《检索技术核心20讲》进阶篇之空间检索
背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243,文档形式记录笔记。 相关问题: 查询范围固定的需求 直接计算两点之间距离区域二进制编码GeoHash编码 查询范围不固定的需求 GeoHash编码索引结构设计 基于…...

uni-app跨域set-cookie
set-cookie的值是作为一个权限控制的 首先,无论什么接口都会返回一个set-cookie,但未登录时,set-cookie是没有任何权限的 其次,登录接口请求时会修改set-cookie,并且在后续其他接口发起请求时,会在请求头…...

移动应用开发:简易登录页
文章目录 简介一,创建新活动二,设计UI布局三,编写活动代码四,运行应用程序注意 简介 使用Android Studio编写的简单Android 登录应用程序,该应用程序包含一个登录界面,具有账号和密码两个文本框࿰…...
C++_ C++11的override和final
文章目录 1. override 关键字2. final 关键字在虚函数上使用 final在类上使用 final 1. override 关键字 用于明确表示派生类中的某个虚函数是用来重写基类中的虚函数的,这样编译器会检查基类,看看是否确实存在同样的虚函数,如果没有匹配&am…...

【MyBatis源码】SQL 语句构建器AbstractSQL
文章目录 介绍org.apache.ibatis.jdbc.SQLSQL类使用示例SelectProvider搭配动态SQLAbstractSQL类源码分析 介绍 当我们需要使用Statement对象执行SQL时,SQL语句会嵌入Java代码中。SQL语句比较复杂时,我们可能会在代码中对SQL语句进行拼接,查…...

C++OJ_二叉树的层序遍历
✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C_OJ 小伞的主页:xiaosan_blog 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣(LeetCode࿰…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...