当前位置: 首页 > news >正文

测绘程序设计|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年测绘程序设计大赛数据就是一个很经典的例子。

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();

  需要注意的是,这种小数取位方式可能是四舍五入、也有可能直接是去尾法、亦或是其他方法,不同的编程语言还不太一样。

  但对于测绘程序设计大赛而言,最终的评分是将你计算的结果与参考值作差,就像浮点数判断是否相等那样,来确定答案正确与否。且大部分参赛选手也都是这么写法、《测绘程序设计》教材参考代码也是这种写法,所以该写法问题并不大。具体可以赛前再与比赛举办方交流沟通~

2024年比赛输出格式要求(部分)

🌳其他字符串方法

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会好很多

笔者比赛时使用的StringBuilder

🌹结语

  1. 关于字符串还有许多其他的知识,比如@符号、字符串的比较、字符串包含与被包含关系等等,因篇幅有限且测绘程序设计大赛用的较少,读者可自行查看微软官方文档:https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/best-practices-strings

  2. 微软官方文档介绍StringBuilder类:https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/stringbuilder

  3. 笔者为测绘遥感方向的学习者,愿意结交志同道合的伙伴,欢迎关注公众号与笔者一起交流学习~


  • 路虽远,行则将至;事虽难,做则必成。希望认真学习的你能够有所收获~

  • 本公众号的原创成果,在未经允许的情况下,请勿用于任何商业用途!

  • 如果本文有幸可以帮到您,欢迎您的点赞👍、收藏⭐与关注❤;您的点赞👍、收藏⭐与关注❤是我创作的最大动力~


http://www.lryc.cn/news/480963.html

相关文章:

  • 自然语言处理——Hugging Face 详解
  • 本地保存mysql凭据实现免密登录mysql
  • Ubuntu 22 安装 Apache Doris 3.0.3 笔记
  • 构建智能防线 灵途科技光电感知助力轨交全向安全防护
  • 【go从零单排】泛型(Generics)、链表
  • IoTDB 与 HBase 对比详解:架构、功能与性能
  • 推荐一款ETCD桌面客户端——Etcd Workbench
  • 01 Oracle 数据库存储结构深度解析:从数据文件到性能优化的全链路探究
  • AI教育革命:个性化学习的新篇章
  • 【网络原理】万字详解 UDP 和 TCP
  • 从零开始搭建Halo个人博客
  • AMD显卡低负载看视频掉驱动(chrome edge浏览器) 高负载玩游戏却稳定 解决方法——关闭MPO
  • 数据结构——二叉树(续集)
  • ElasticSearch学习篇16_《检索技术核心20讲》进阶篇之空间检索
  • uni-app跨域set-cookie
  • 移动应用开发:简易登录页
  • C++_ C++11的override和final
  • 【MyBatis源码】SQL 语句构建器AbstractSQL
  • C++OJ_二叉树的层序遍历
  • 什么是直方图算法
  • pg_dump -Fc 导出的自定义格式数据库文件 相关操作
  • Oh My Posh安装
  • Node.js——fs模块-文件夹操作
  • 15分钟学 Go 实战项目三 : 实时聊天室(学习WebSocket并发处理)
  • 架构评估的方法
  • 羲和数据集收集器1.0
  • ENSP OSPF和BGP引入
  • 软件工程 软考
  • 证书学习(六)TSA 时间戳服务器原理 + 7 个免费时间戳服务器地址
  • NVR设备ONVIF接入平台EasyCVR私有化部署视频平台如何安装欧拉OpenEuler 20.3 MySQL