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;
    }
}

​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java---包装类与泛型

1.包装类 1.1 包装类 在Java中&#xff0c;由于基本数据类型不是继承Object类&#xff0c;为了在泛型代码中可以支持基本数据类型&#xff0c;Java给每个基本数据类型各自提供了一个包装类。 如下图 除了char和int基本数据类型的包装类型有点特别&#xff0c;其他的都是首字…

20240708 每日AI必读资讯

&#x1f916;破解ChatGPT惊人耗电&#xff01;DeepMind新算法训练提效13倍&#xff0c;能耗暴降10倍 - 谷歌DeepMind研究团队提出了一种加快AI训练的新方法——多模态对比学习与联合示例选择&#xff08;JEST&#xff09;&#xff0c;大大减少了所需的计算资源和时间。 - JE…

MySQL高级----InnoDB引擎

逻辑存储结构 表空间 表空间(ibd文件)&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;用于存储记录、索引等数据。 段 段&#xff0c;分为数据段&#xff08;Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment)&#xff0c;InnoDB是…

Go-Zero 框架使用 MongoDB,数据采集入库如此简单

目录 引言 环境准备 如何使用 main入口代码实现 实现采集网络接口 总结 其他资源 引言 Go-Zero 是一个高性能、可扩展的微服务框架&#xff0c;专为 Go 语言设计。它提供了丰富的功能&#xff0c;如 RPC、RESTful API 支持、服务发现、熔断器、限流器等&#xff0c;使开…

2024数据加密神器丨企业级透明加密软件排行榜

透明加密软件通过在操作系统层面进行底层驱动开发&#xff0c;对指定类型的文件进行自动透明加解密。这种加密方式对用户来说是完全透明的&#xff0c;用户在使用加密文件时&#xff0c;不会感到任何不便。同时&#xff0c;由于加密是在文件级别进行的&#xff0c;因此可以有效…

SRS流媒体服务器概述

SRS/5.0(Bee) is a simple, high efficiency and realtime video server, supports RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH and GB28181. 翻译&#xff1a;SRS/5.0(Bee)是一款简洁、高效、实时的视频服务器&#xff0c;支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DAS…

vue 启动项目报错Syntax Error: Error: PostCSS received undefined instead of CSS string

启动vue项目然后报错如下图 这个是跟node版本有关系 因为要开发不同的项目使用不同的node版本&#xff0c;所以就用nvm切换&#xff0c;所以导致了node-sass编译问题 执行这个命令就可以 npm install node-sass or npm rebuild node-sass node-sass对于node高版本和低版本切…

我与OceanBase|一位DBA老兵的国产数据库探索之旅

本文作者&#xff1a;尚雷&#xff0c;有超过十年的工作经验&#xff0c;目前就职于南京一家上市互联网企业&#xff0c;担任DBA。Oracle 11g OCM&#xff0c;Oracle及PG的 ACE认证&#xff0c;并有AWS及国产知名数据库等多项认证。他热衷于技术交流与分享&#xff0c;爱交友&a…

C++·栈和队列

栈和队列是什么看这里&#xff1a; 数据结构栈和队列-CSDN博客文章浏览阅读948次&#xff0c;点赞25次&#xff0c;收藏26次。本节讲解了栈和队列的内容&#xff0c;其核心就是栈的特点是后进先出&#xff0c;队列的特点是先进先出。并用C语言实现了栈和队列的结构以及它们的各…

深度解析移动硬盘“函数不正确”错误及高效恢复策略

在数据密集型的社会中&#xff0c;移动硬盘作为移动存储的重要载体&#xff0c;承载着无数用户的个人信息、工作资料及珍贵回忆。然而&#xff0c;当遭遇“函数不正确”的错误时&#xff0c;这些宝贵的数据仿佛被一层无形的屏障所阻隔&#xff0c;让人束手无策。本文将深入探讨…

SiCat:一款多功能漏洞利用管理与搜索工具

关于SiCat SiCat是一款多功能漏洞利用管理与搜索工具&#xff0c;该工具基于纯Python 3开发&#xff0c;旨在帮助广大研究人员有效地识别和收集来自开源和本地存储库的漏洞信息。 SiCat专注于网络安全管理方面的实践工作&#xff0c;允许研究人员快速实现在线搜索&#xff0c;…

关于centos7自带的nginx1.20.1开启https后,XP系统的IE6和IE8无法显示网页的问题

CentOS7自带的nginx-1.20.1是支持HTTP/2和TLS1.3的。 软件包名称&#xff1a;nginx-1.20.1-10.el7.x86_64 CentOS7默认开启了HTTP/2&#xff0c;但没有开启TLS1.3&#xff0c;以及IE6和IE8的https访问。 开启方法&#xff1a; ssl_ciphers HIGH:!aNULL:!MD5;改为ssl_ciphers…

新增多种图表类型,新增插件管理模块,DataEase开源数据可视化分析工具v2.8.0发布

2024年7月8日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.8.0版本。 这一版本的功能变动包括&#xff1a;图表方面&#xff0c;新增组合图、热力地图、符号地图、K线图等图表类型&#xff0c;并对已有的仪表盘、明细表、指标卡、富文本等图表类型进行了功…

非参数检测5——双输入检测系统

在很多情况下&#xff0c;信号常常存在于两个带有独立噪声的信道中。所以很有必要研究双输入系统。双输入系统广泛应用于无线电天文学、水下声波检测和地球物理学等领域。

SpringBoot拦截器

目录 一、拦截器快速入门 &#xff08;1&#xff09;什么是拦截器 &#xff08;2&#xff09;拦截器的使用步骤 1、定义拦截器 &#x1f340;preHandle() 方法 &#x1f340;postHandle() 方法 &#x1f340;afterCompletion() 方法 2、注册配置拦截器 二、拦截器详解…

43、nginx的优化、防盗链、重定向、代理

nginx的优化、防盗链、重定向、代理 一、nginx的优化 1.1、隐藏版本号 server_tokens off;隐藏版本号 [roottest1 conf]# vim nginx.confserver_tokens off;[roottest1 conf]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok ngin…

顾客排队购买蛋挞问题(算法与数据结构设计)

课题内容和要求 顾客排队买蛋挞问题。有N个顾客排队&#xff0c;每人最多买M个。烘焙员每次烘焙1到K个蛋挞放入盘中&#xff0c;顾客只能购买盘中的蛋挞&#xff0c;未达到M个需重新排队。输出每个顾客购买情况和完成顺序。 例如—— 输入&#xff1a;N9&#xff0c;K5&#x…

Linux安装elasticsearch单机版

一、检查内核 uname -a uname -m 二、下载版本 下载版本选择自己服务器相同的内核版本 我这边是aaech64 ES下载地址 Kibana 下载地址 二、上传服务器解压 tar -xvf elasticsearch-8.14.1-linux-aarch64.tar.gz 三、安装ES 因为ES不能用root用户启动先创建用户 #新增 es …

Django QuerySet对象,all()方法

all()方法 在Django中&#xff0c;all()方法是QuerySet对象的一个方法&#xff0c;用于获取模型的所有实例。 当你调用ModelName.objects.all()时&#xff0c;Django会生成一个SQL查询&#xff0c;从数据库中获取该模型的所有记录&#xff0c;并返回一个QuerySet对象&#xf…

【产品运营】Saas的核心六大数据

国内头部软件公司的一季度表现惨不忍睹&#xff0c;为啥美国的还那么赚钱呢&#xff1f;其实核心是&#xff0c;没几个Saas产品经理是看数据的&#xff0c;也不知道看啥数据。 SaaS 行业&#xff0c;天天抛头露面、名头叫的响的 SaaS 产品&#xff0c;真没有几个赚钱的。 那为…