c#字符串常用方法

目录

1.字符串的处理常用方法 

1.1 Format

1.2 IsNullOrEmpty和IsNullOrWhiteSpace

1.3 Equals

1.4 Contains

1.5 Length

1.6 Substring

1.7 IndexOf和LastIndexOf

1.8 ​​​​​​​StartsWith 和 EndsWith

1.9 ​​​​​​​Remove

1.10 ​​​​​​​Revserse

1.11 ​​​​​​​Trim

1.12 ToLower和ToUpper

1.13 Replace

1.14 ​​​​​​​Concat

1.15 ​​​​​​​Join

1.16 Split

 2. 实现身份证的解析

3. 遍历磁盘,列出目录和文件、统计文件个数,统计不同类型(后缀)的文件个数


1.字符串的处理常用方法

 Format

格式化

IsNullOrEmpty&

IsNullOrWhiteSpace

null没有初始化,Empty空串="",WhiteSpace=" "
Equals判断是否相等,对象比较
Contains判断是否包含子串,大小写敏感
Length求字符串长度
Substring截取字符串,获取字符串的一部分

IndexOf&

LastIndexOf

找到某个字符串的位置(从前往后,从后往前)
 ​​​​​​StartsWith& EndsWith判断是否以什么开始,是否以什么结尾
Remove删除部分字符串
Revserse字符串反转
Trim删除字符串两边的空格
ToLower&ToUpper转大写转小写
Replace替换
Concat字符串拼接,用+拼接
Join把多个字符串连接,有一个分隔符
Split根据分隔符,把字符串进行分割成数组

可根据具体代码进行了解字符串的常用方法:

1.1 Format

格式化

String str = "Hello world!";
String name = "陈晨";
int age = 18;String message = "大家好,我是{0},我今年{1}岁";
//有几个占位符,就需要几个参数,占位符的顺序也必须一致
Console.WriteLine(string.Format(message, name, age));
1.2 IsNullOrEmpty和IsNullOrWhiteSpace

null没有初始化,Empty空串="",WhiteSpace=" "

isNullOrWhiteSpace比前面的多空格字符串判断,但是根据业务情况,如果业务不会造成这种情况,使用第一个即可。

string username = "chenchen";
string password = "123456";
if (string.IsNullOrEmpty(username))
{throw new ArgumentNullException("username is null");
}
else
{if (string.IsNullOrEmpty(password)){throw new ArgumentNullException("password is null");}
}
Console.WriteLine("登陆成功!");
1.3 Equals

判断是否相等,对象比较

string str = "Hello";
//c#大小写敏感,忽略大小写
if (str.ToLower().Equals("hello"))
{Console.WriteLine("相等");
}
else
{Console.WriteLine("不相等");
}
1.4 Contains

判断是否包含子串,大小写敏感

string str = "Hello world.";
if (str.Contains("x"))
{Console.WriteLine("包含");
}
else
{Console.WriteLine("不包含");
}
1.5 Length

求字符串长度

string str = "Hello World. 你好";
Console.WriteLine(str.Length);
1.6 Substring

截取字符串,获取字符串的一部分

string str = "Hello World. 你好";
Console.WriteLine(str.Substring(0));
//从哪个位置开始,截取多长
Console.WriteLine(str.Substring(6,5));
//截取到最后
Console.WriteLine(str.Substring(13));
Console.WriteLine(str.Substring(str.Length-2));
1.7 IndexOf和Last​​​​​​​IndexOf

找到某个字符串的位置(从前往后,从后往前)

string path = "E:\\BaiduNetdiskDownload\\课后作业\\第二次课后作业-你的姓名.docx";
//为什么斜杠要写两个,第一个斜杠是转义字符,第二个斜杠是真正的斜杠字符
Console.WriteLine(path);
//Console.WriteLine(path.IndexOf(":"));
//Console.WriteLine(path.LastIndexOf(":"));
int pos = path.LastIndexOf("\\");
int dotPos = path.LastIndexOf(".");
//1.打印我的路径
string dir = path.Substring(0, path.LastIndexOf("\\"));
Console.WriteLine(dir);
//2.打印文件名,带后缀
string fileName = path.Substring(pos + 1);
Console.WriteLine(fileName);
//3.打印文件名,不带后缀
Console.WriteLine(fileName.Substring(0, dotPos - pos - 1));
//4.打印文件类型(扩展名)
Console.WriteLine(path.Substring(dotPos + 1));
1.8 ​​​​​​​StartsWith 和 EndsWith

判断是否以什么开始,是否以什么结尾

string path = "E:\\BaiduNetdiskDownload\\课后作业\\第二次课后作业-你的姓名.docx";
if (path.StartsWith("E:\\BaiduNetdiskDownload"))
{Console.WriteLine("属于鼎捷项目的文件");
}
string extName = path.Substring(path.LastIndexOf("."));
Console.WriteLine("扩展名:{0}",extName);
if(path.EndsWith(".docx"))
{Console.WriteLine("word文档");
}else if(path.EndsWith(".jpg"))
{Console.WriteLine("图片文档");
}
else if(path.EndsWith(".mp4"))
{Console.WriteLine("电影文档");
}
1.9 ​​​​​​​Remove

删除部分字符串

string path = "E:\\BaiduNetdiskDownload\\课后作业\\第二次课后作业-你的姓名.docx";
//从哪里开始删除,删除几个
Console.WriteLine(path.Remove(path.LastIndexOf("."),1));
1.10 ​​​​​​​Revserse

字符串反转

string str = "我的骄傲";
Console.WriteLine(str.Reverse().ToArray());
1.11 ​​​​​​​Trim

删除字符串两边的空格

string str = "  我的   骄傲   ";
Console.WriteLine("--"+str.Trim()+"--");//删除左右空格
1.12 ToLower和ToUpper

转大写转小写

string str = "hello World";
Console.WriteLine(str.ToLower());//小写
Console.WriteLine(str.ToUpper());//大写str = str.Replace(" ", "");
string first = str.Substring(0,1);//首字母
//大驼峰:HelloWorld
Console.WriteLine(first.ToUpper() + str.Substring(1));
Console.WriteLine(string.Concat(first.ToUpper(),str.Substring(1)));
//小驼峰:hellwWorld
Console.WriteLine(first.ToLower() + str.Substring(1));
Console.WriteLine(string.Concat(first.ToLower(), str.Substring(1)));*/
1.13 Replace

替换

string str = "  我的   骄傲   ";
Console.WriteLine(str.Replace(" ",""));//替换
Console.WriteLine(str.Replace(" ","-"));
1.14 ​​​​​​​Concat

字符串拼接,用+拼接

string str = "hello World";
Console.WriteLine(str.ToLower());//小写
Console.WriteLine(str.ToUpper());//大写str = str.Replace(" ", "");
string first = str.Substring(0,1);//首字母
//大驼峰:HelloWorld
Console.WriteLine(first.ToUpper() + str.Substring(1));
Console.WriteLine(string.Concat(first.ToUpper(),str.Substring(1)));
//小驼峰:hellwWorld
Console.WriteLine(first.ToLower() + str.Substring(1));
Console.WriteLine(string.Concat(first.ToLower(), str.Substring(1)));
1.15 ​​​​​​​Join

把多个字符串连接,有一个分隔符

string[] name = { "刘备", "关羽", "张飞" };
string str = "";
//转换成一个字符串
for (int i = 0; i < name.Length; i++)
{str += string.Concat(name[i],",");
}
//去掉多余的逗号
str = str.Remove(str.Length - 1);
Console.WriteLine(str);
//第一个参数是分隔符,第二个参数是数组
Console.WriteLine(string.Join("|",name));
1.16 Split

根据分隔符,把字符串进行分割成数组

string citystr = "北京,上海,深圳,杭州";
//变成一个数组,获取数组的每个元素
string[] cities = citystr.Split(',');
foreach(string s in cities)
{Console.WriteLine(s);
}

 2. 实现身份证的解析

身份证号码(以中国大陆的18位身份证号码为例)包含了地区码、出生日期码、顺序码和校验码等信息:

1)地区码:身份证号码前6位

2)出生日期码:身份证号码接下来的8位

3)顺序码:身份证号码接下来的3位

4)校验码:身份证号码最后1位

下面的代码简单展示了如何使用C#中的字符串处理方法来解析一个18位身份证号码

IDCardParser.cs

using System;
using System.Globalization;namespace DJConsoleProject
{public class IDCardParser{public static void ParseIDCard(string idCard){if (string.IsNullOrEmpty(idCard) || idCard.Length != 18){Console.WriteLine("身份证号码无效:长度不正确或为空。");return;}// 提取地区码  string areaCode = idCard.Substring(0, 6);Console.WriteLine($"地区码:{areaCode}");// 提取出生日期  string birthDate = idCard.Substring(6, 8);DateTime birthDateTime;if (DateTime.TryParseExact(birthDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out birthDateTime)){Console.WriteLine($"出生日期:{birthDateTime.ToString("yyyy-MM-dd")}");}else{Console.WriteLine("出生日期格式无效。");}// 提取顺序码(最后一位校验码之前的部分)  string sequenceCode = idCard.Substring(14, 3);Console.WriteLine($"顺序码:{sequenceCode}");// 提取校验码  string checkDigit = idCard.Substring(17, 1);Console.WriteLine($"校验码:{checkDigit}");}}
}

Program.cs

using System;
using DJConsoleProject;internal class Program
{static void Main(string[] args){string idCard = "11010519491231002X"; // 示例身份证号码  IDCardParser.ParseIDCard(idCard);// 等待用户输入,防止控制台窗口立即关闭  Console.WriteLine("按任意键退出...");Console.ReadKey();}
}

结果如图:

3. 遍历磁盘,列出目录和文件、统计文件个数,统计不同类型(后缀)的文件个数

  1. 设定根目录:选择一个要遍历的根目录,例如C:\。

  2. 遍历函数TraverseDirectory函数递归地遍历给定目录及其所有子目录,并统计每个文件类型的数量。它使用一个Dictionary<string, int>来存储每种文件类型的数量,其中键是文件扩展名(不包括点号),值是该类型文件的数量。

  3. 文件类型统计:对于每个文件,通过FileInfo类的Extension属性获取其扩展名,并移除点号以用作字典的键。如果字典中尚未包含该键,则将其添加到字典中,并将计数初始化为0。然后,将该类型的文件计数加1。

  4. 递归调用:对于每个子目录,递归调用TraverseDirectory函数,并将返回的结果合并到当前字典中。

  5. 异常处理:使用try-catch块来处理可能发生的任何异常,如权限不足等。

  6. 输出结果:最后,程序输出总文件数和每种文件类型的数量。

using System;
using System.Collections.Generic;
using System.IO;class Program
{static void Main(string[] args){// 设定要遍历的根目录  string rootDirectory = @"C:\Users\Acer\source\repos\DJConsoleProject";// 调用函数遍历目录  Dictionary<string, int> fileCountByType = TraverseDirectory(rootDirectory);// 输出结果  Console.WriteLine("Total Files: " + fileCountByType.Values.Sum());foreach (var kvp in fileCountByType){Console.WriteLine($"{kvp.Key} Files: {kvp.Value}");}Console.ReadLine();}static Dictionary<string, int> TraverseDirectory(string directoryPath){Dictionary<string, int> fileCountByType = new Dictionary<string, int>();try{// 获取目录下的所有文件和文件夹  string[] directories = Directory.GetDirectories(directoryPath);string[] files = Directory.GetFiles(directoryPath);// 遍历文件  foreach (string file in files){FileInfo fileInfo = new FileInfo(file);string extension = fileInfo.Extension.TrimStart('.'); // 移除点号  // 初始化或增加该类型的文件计数  if (!fileCountByType.ContainsKey(extension)){fileCountByType[extension] = 0;}fileCountByType[extension]++;}// 递归遍历子目录  foreach (string dir in directories){Dictionary<string, int> subDirCounts = TraverseDirectory(dir);foreach (var kvp in subDirCounts){// 将子目录中的文件类型计数合并到总字典中  if (!fileCountByType.ContainsKey(kvp.Key)){fileCountByType[kvp.Key] = 0;}fileCountByType[kvp.Key] += kvp.Value;}}}catch (Exception ex){Console.WriteLine($"Error accessing the directory '{directoryPath}'. Reason: {ex.Message}");}return fileCountByType;}
}

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1475165.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

如何手工DIV一个小车:基于树莓派和总线舵机的智能小车实现

成品演示&#xff1a;bilibili - 悄悄的魔法书 代码仓库&#xff1a;github - flying forever 或者 gitee - 清风莫追 文章目录 1 引言1.1 课题背景1.2 课题意义1.3 课题目的 2 课题相关知识与开发环境3 课题的总体设计4 课题的详细设计与实现4.1 小车物理结构4.1.1 轮子4.1.2 …

2024年最新ComfyUI汉化及manager插件安装详解!

前言 在ComfyUI文生图详解中&#xff0c;学习过如果想要安装相应的模型&#xff0c;需要到模型资源网站&#xff08;抱抱脸、C站、魔塔、哩布等&#xff09;下载想要的模型&#xff0c;手动安装到ComfyUI安装目录下对应的目录中。 为了简化这个流程&#xff0c;我们需要安装Co…

如何在 PostgreSQL 中实现数据的去重操作,尤其是对于复杂的数据结构?

文章目录 一、基本数据类型的去重二、多列数据的去重三、复杂数据结构的去重&#xff08;一&#xff09;数组类型的去重&#xff08;二&#xff09;JSON 类型的去重&#xff08;三&#xff09;结构体类型&#xff08;复合类型&#xff09;的去重 四、使用 GROUP BY 进行去重五、…

数据结构--堆,堆排序

1.树概念及结构 1.1树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个 特殊的结…

自动高速开箱机:如何助力电商物流行业

在电商飞速发展的今天&#xff0c;物流行业也迎来了前所未有的挑战与机遇。为了满足消费者对快速、高效、安全的配送需求&#xff0c;各大电商平台和物流公司纷纷寻求技术革新&#xff0c;其中&#xff0c;自动高速开箱机凭借其独特的优势&#xff0c;在电商物流中崭露头角&…

vulnhub-Os-hackNos-3(包含多种靶机获取不了IP地址情况)

下载靶机 通过VMware搭建 网络问题是个关键点 我们点击开启虚拟机&#xff0c;到开机的页面我们回车选择第二个Ubuntu的高级选项 (如果出不来这个选择界面&#xff0c;开机时按下shift键) 进到高级选项&#xff0c;我们再次回车选择第二个进入Linux内核版本的恢复模式 回车后…

BaseServlet的封装

创建BaseServlet的必要性 如果不创建BaseServlet&#xff0c;现在我们只要实现一个功能&#xff0c;我们就需要创建一个servlet! 例如:用户模块(登录&#xff0c;注册&#xff0c;退出录&#xff0c;激活&#xff0c;发送邮件等等功能) 也就是说&#xff0c;我们必须要创建一…

Vue3使用ref绑定组件获取valueRef.value为null的解决

问题&#xff1a; onMounted(() > {nextTick(()>{console.log(treeselectRef, treeselectRef.value);console.log(treeselectRef.value, treeselectRef.value);}); });输出&#xff1a; 查看绑定和定义都没有问题&#xff0c;还是获取不到 解决&#xff1a;使用getCur…

YOLOv5+DecoupleHead解耦头(YOLOx)

一、解耦头原理 在目标检测中,分类任务和回归任务之间的冲突是一个众所周知的问题。因此,用于分类和定位的解耦头被广泛应用于大多数一级和二级探测器。但是,由于YOLO系列的主干和特征金字塔(如FPN, PAN)不断演化,它们的检测头仍然是耦合的。 从下表可以看出,头耦合时端…

leetcode 1398 购买了产品A和产品B却没有购买产品C的顾客(postgresql)

需求 Customers 表&#xff1a; ---------------------------- | Column Name | Type | ---------------------------- | customer_id | int | | customer_name | varchar | ---------------------------- customer_id 是这张表的主键。 customer_name 是顾客的名称。 Order…

水果商城系统 SpringBoot+Vue

1、技术栈 技术栈&#xff1a;SpringBootVueMybatis等使用环境&#xff1a;Windows10 谷歌浏览器开发环境&#xff1a;jdk1.8 Maven mysql Idea 数据库仅供学习参考 【已经答辩过的毕业设计】 项目源码地址 2、功能划分 3、效果演示

【软件分享】我们为分类而生—eCognition

分类是各位小伙伴入门遥感需要做的一项基础的工作&#xff0c;在进行遥感影像中的地物进行分类和提取时&#xff0c;如何提高分类精度&#xff0c;常常令人头疼。今天小编带来此前接触过的一个工具&#xff0c;他的名字是—eCognition&#xff0c;感觉比ENVI好用&#xff0c;在…

gui创新点charts图表

import javax.swing.*; import java.awt.*;public class ComboChartExample extends JPanel {Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);// 数据int[] values {100, 200, 150, 300, 250};int[] lineValues {120, 180, 160, 280, 230};Str…

掌上教务系统-计算机毕业设计源码84604

摘要 在数字化教育日益成为主流的今天&#xff0c;教务管理系统的智能化和便捷性显得尤为重要。为满足学校、教师、学生及家长对教务管理的高效需求&#xff0c;我们基于Spring Boot框架设计并实现了一款掌上教务系统。该系统不仅具备课程分类管理功能&#xff0c;使各类课程信…

Git 查看、新建、删除、切换分支

Git 是一个版本控制系统&#xff0c;软件开发者用它来跟踪应用程序的变化并进行项目协作。 分支的诞生便于开发人员在彼此独立的环境中进行开发工作。主分支&#xff08;通常是 main 或 master&#xff09;可以保持稳定&#xff0c;而新的功能或修复可以在单独的分支中进行开发…

猫咪健康新选择!福派斯鲜肉猫粮里的果蔬纤维大揭秘

你们是不是对福派斯鲜肉猫粮中那些丰富的果蔬粗纤维特别好奇呢&#xff1f;&#x1f914; 其实&#xff0c;这些看似简单的粗纤维&#xff0c;对猫咪的健康可是大有裨益的&#xff01; 粗纤维在猫粮中起到多种重要作用&#xff0c;并且对猫咪的健康和消化系统有着显著的影响。以…

运维系列.Nginx中使用HTTP压缩功能

运维专题 Nginx中使用HTTP压缩功能 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550…

linux 安装Openjdk1.8

一、在线安装 1、更新软件包 sudo apt-get update 2、安装openjdk sudo apt-get install openjdk-8-jdk 3、配置openjdk1.8 openjdk默认会安装在/usr/lib/jvm/java-8-openjdk-amd64 vim ~/.bashrc export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME${J…

计算机网络-组播数据转发原理

一、组播数据转发原理 前面已经学习了组播的基本概念和网络组成结构了&#xff0c;今天来学习下组播数据的转发。首先我们要先明确组播网络也是和单播一样需要网络可达的&#xff0c;因此也是需要单播网络支持的基础上配置组播转发数据。单播网络不通组播网络就没有意义了。 组…