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

devtools/2024/11/13 10:53:12/

由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~


  简单介绍了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 class=测绘程序设计大赛数据格式说明" />

🌸字符串取子串

  字符串的子串,是指从一个字符串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.ppmy.cn/devtools/132910.html

相关文章

若依管理系统部署

jdk、maven、node、mysql、redis准备 mysql准备 #安装mysql apt install mysql-server修改mysql配置 vim /etc/mysql/mysql.conf.d/mysqld.cnf #注释这两条 #bind-address x.x.x.x #mysqlx-bind-address x.x.x.x启动mysql systemctl start mysql.servicemys…

软件工程3.0和软件工程2.0的区别

一、软件工程3.0和软件工程2.0的区别 软件工程3.0与软件工程2.0的主要区别体现在以下几个方面&#xff1a; 1. 技术基础和应用范围&#xff1a; - 软件工程2.0&#xff1a;在软件工程2.0阶段&#xff0c;软件工程逐渐从结构化编程转向面向对象编程&#xff0c;AI for SE&…

CTF —— 网络安全大赛

前言 &#x1f4bb;随着大数据、人工智能的发展&#xff0c;人们步入了新的时代&#xff0c;逐渐走上科技的巅峰。 ⚔科技是一把双刃剑&#xff0c;网络安全不容忽视&#xff0c;人们的隐私在大数据面前暴露无遗&#xff0c;账户被盗、资金损失、网络诈骗、隐私泄露&#xff…

PDF模板制作与填充(Java)

1.PDF模板制作 准备原始模板 准备一个原始PDF模板&#xff0c;可以编辑好Word&#xff0c;预留出要填充的部分&#xff0c;再转换成PDF格式。 设置表单域 用任意PDF编辑器打开PDF模板文件&#xff0c;设置表单域&#xff0c;下面以WPS为例&#xff1a; 拖动文本域到需要填充的…

基于 STM32 的天气时钟项目中添加天气数据的网络获取功能

基于 STM32 的天气时钟项目中添加天气数据的网络获取功能&#xff0c;您需要确保您的开发环境具备网络连接能力。这里以 ESP8266 Wi-Fi 模块为例&#xff0c;详细说明如何实现网络获取天气数据的功能。 1. 硬件连接 连接 ESP8266 模块 请参考以下连接方式&#xff0c;将 ESP82…

软考(中级-软件设计师)数据库篇(1101)

第6章 数据库系统基础知识 一、基本概念 1、数据库 数据库&#xff08;Database &#xff0c;DB&#xff09;是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储&#xff0c;具有较小的冗余度、较高的数据独立性和扩展…

有理函数的不定积分

内容来源 数学分析&#xff08;第五版上册&#xff09;华东师范大学数学科学学院编 有理函数 有理函数是由两个多项式函数的商所表示的函数&#xff0c;其一般形式为 R ( x ) P ( x ) Q ( x ) α 0 x n α 1 x n − 1 ⋯ α n β 0 x m β 1 x m − 1 ⋯ β m R(x)\f…

跨境独立站新手,如何用DuoPlus云手机破局海外社媒引流?

独立站作为电商领域的一个重要组成部分&#xff0c;其发展在最近几年里确实令人瞩目&#xff0c;对于想要进入跨境赛道的新手卖家来说&#xff0c;手上握着有优势的货源&#xff0c;建立小型的DTC独立站确实会比入驻第三方平台具有更大的灵活性。本文将给跨境卖家们总结独立站和…