首页 > 编程语言 >C#-z3

C#-z3

时间:2024-07-03 23:29:50浏览次数:28  
标签:Console string WriteLine C# Substring str path z3

1、字符串的常见方法

  1. Format:用于字符串格式化,通过占位符和参数匹配来构建字符串。
    string name = "Alice";
    string greeting = string.Format("Hello, {0}!", name);
    Console.WriteLine(greeting); // 输出: Hello, Alice!
  2. IsNullOrEmpty/IsNullOrWhiteSpace:用于检查字符串是否为空或仅由空白字符组成。       
    string username = "        ";
    string password = "123456";
    
    if (string.IsNullOrWhiteSpace(username))
    {
        throw new ArgumentNullException("username is null");
    }
    else
    {
        if (string.IsNullOrEmpty(password))
        {
            throw new ArgumentNullException("password is null");
        }
    }
    
    Console.WriteLine("登录成功!");
  3. Equals:比较字符串,支持忽略大小写的比较。                                                                     
    string str = "Hello";
    
    //c#大小写敏感,忽略大小写
    //if(str.ToLower() == "hello")
    //if(str.Equals("hello"))
    
    if(str.ToLower().Equals("hello"))
    {
        Console.WriteLine("相等");
    }
    else
    {
        Console.WriteLine("不相等");
    }
  4. Contains:判断一个字符串是否包含另一个字符串。                                                               
    string str = "Hello world";
    if (str.Contains("Hello"))
    {
        Console.WriteLine("1");
    }
    else
    {
    Console.WriteLine("0"); 
    }
  5. Length:获取字符串的长度。                                                                                                   
    string str = "Hello world";
    Console.WriteLine(str.Length);
  6. Substring:从字符串中抽取子串,可以指定起始位置和长度。                                               
    string str = "Hello World. 你好";
    
    Console.WriteLine(str.Substring(0));//截取全部字符
    
    Console.WriteLine(str.Substring(0, 5));//从一个字符开始截取5个字符
    
    //开发时,不用精确去先算好,大概猜一个位置,不正确了再修改
    Console.WriteLine(str.Substring(6, 5));//从第七个字符开始(n+1)
    
    //截取到最后
    Console.WriteLine(str.Substring(13));
    Console.WriteLine(str.Substring(str.Length - 2));
  7. IndexOf/LastIndexOf:分别查找子字符串首次出现的位置和最后一次出现的位置                  
    //为什么斜杠要写两个,第一个斜杠是语言转义字符,第二个斜杠真正斜杠字符
    string path = "C:\\课:程\\03-CSharp\\day04\\课堂笔记.docx";
    
    Console.WriteLine(path);
    
    Console.WriteLine( path.IndexOf(":") );
    Console.WriteLine( path.LastIndexOf(":") );
  8. StartsWith/EndsWith:判断字符串是否以指定子串开头或结尾。                                           
    string path = "C:\\课程\\03-CSharp\\day04\\课堂笔记.docx";
    if (path.StartsWith("C:\\课程"))
    {
        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("电影文档");
    }

  9. Remove:从字符串中移除一部分,常用于移除后缀。                                                             
    string path = "C:\\课:程\\03-CSharp\\day04\\课堂笔记.docx";
    Console.WriteLine(path.Remove(path.LastIndexOf(".")));    
  10. Reverse:反转字符串                                                                                                               
    string str = "以身为则";
    Console.WriteLine(str.Reverse().ToArray());
  11. Trim/Replace:去除字符串两端空白或替换特定字符。                                                             
    string str = "     以身     为则    ";
    Console.WriteLine(str);
    Console.WriteLine(str.Trim());//去除两端空格
    
    Console.WriteLine(str.Replace(" ", ""));// 将所有空格替换为空字符串
    Console.WriteLine(str.Replace(' ', '-'));// 将所有空格替换为破折号
  12. Concat:连接字符串,支持大小驼峰命名法的转换。                                                               
    string str = "helloWorld";
    
    string first = str.Substring(0, 1); //首字母
    
    //大驼峰:HelloWorld
    Console.WriteLine(first.ToUpper() + str.Substring(1));
    Console.WriteLine(string.Concat(first.ToUpper(), str.Substring(1)));
    
    
    //小驼峰:helloWorld
    Console.WriteLine(first.ToLower() + str.Substring(1));
    Console.WriteLine(string.Concat(first.ToLower(), str.Substring(1)));

  13. Join/Split:将字符串数组连接为单个字符串,或将字符串分割为数组。                                 
    string[] names = { "xiaomi", "huawei" };
    string str = "";
    //转换成一个字符串
    for (int i = 0; i < names.Length; i++)
    {
        str += string.Concat(names[i], " ");
    }
    Console.WriteLine(str);
    
    //第一个参数是分隔符,第二参数数组
    Console.WriteLine(string.Join(" ", names));
    
    string citystr = "北京,上海,深圳,广州,杭州";
    //变成一个数组,获取数组的每个元素
    string[] cities = citystr.Split(",");
    foreach (string s in cities)
    {
        Console.WriteLine(s);
    }

2、实现身份证的解析

定义类与方法

1class IDCardParser
2{
3    public static void ParseIDCard(string idCardNumber)
4    {
5        // ...
6    }
7}

这里定义了一个名为IDCardParser的类,它包含一个静态方法ParseIDCard。静态方法意味着可以直接通过类名调用,而无需实例化类的对象。此方法接受一个字符串参数idCardNumber,即待解析的身份证号码。

验证身份证号码长度

1if (idCardNumber.Length != 18)
2{
3    Console.WriteLine("身份证号码长度不正确!");
4    return;
5}

首先,代码检查输入的身份证号码是否恰好为18位长。如果不是,程序将输出错误信息并立即终止方法的执行,不再进行后续的解析步骤。

解析地址码

1string addressCode = idCardNumber.Substring(0, 6);
2Console.WriteLine($"地址码: {addressCode}");

接下来,使用Substring方法从身份证号码中提取前6位字符,这部分称为地址码,用于标识身份证持有者的户籍所在地。提取后,使用Console.WriteLine方法将地址码输出到控制台。

解析出生日期

1string birthDateStr = idCardNumber.Substring(6, 8);
2DateTime birthDate;
3if (DateTime.TryParseExact(birthDateStr, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out birthDate))
4{
5    Console.WriteLine($"出生日期: {birthDate.ToString("yyyy-MM-dd")}");
6}

从身份证号码中提取第7位到第14位字符,这部分代表出生日期,格式为yyyyMMdd。使用DateTime.TryParseExact方法尝试将这8位数字解析为一个DateTime对象。如果解析成功,将结果转换为“年-月-日”的格式并输出到控制台。

解析性别

1int orderCode = int.Parse(idCardNumber.Substring(14, 3));
2string gender = orderCode % 2 == 0 ? "女" : "男";
3Console.WriteLine($"性别: {gender}");

提取身份证号码中第15位到第17位的数字,这部分称为顺序码,用于区分同年同月同日出生的人。通过检查顺序码的最后一位是奇数还是偶数来判断性别,奇数代表男性,偶数代表女性,然后将结果输出到控制台。

解析校验码

1string checkCode = idCardNumber.Substring(17, 1);
2Console.WriteLine($"校验码: {checkCode}");

最后,从身份证号码中提取第18位字符,即校验码,用于验证身份证号码的正确性。直接输出校验码到控制台。

主函数与用户输入

1static void Main()
2{
3    Console.Write("请输入您的身份证号码: ");
4    string idCardNumber = Console.ReadLine();
5
6    ParseIDCard(idCardNumber);
7}

Main函数中,程序提示用户输入身份证号码,并使用Console.ReadLine()方法读取用户输入的字符串。之后,调用ParseIDCard方法,将用户输入的身份证号码作为参数传递进去,从而执行整个解析过程

源码:

using System;

class IDCardParser
{
    public static void ParseIDCard(string idCardNumber)
    {
        if (idCardNumber.Length != 18)
        {
            Console.WriteLine("身份证号码长度不正确!");
            return;
        }

        // 地址码
        string addressCode = idCardNumber.Substring(0, 6);
        Console.WriteLine($"地址码: {addressCode}");
        // 出生日期码
        string birthDateStr = idCardNumber.Substring(6, 8);
        DateTime birthDate;
        if (DateTime.TryParseExact(birthDateStr, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out birthDate))
        {
            Console.WriteLine($"出生日期: {birthDate.ToString("yyyy-MM-dd")}");
        }

        // 性别
        int orderCode = int.Parse(idCardNumber.Substring(14, 3));
        string gender = orderCode % 2 == 0 ? "女" : "男";
        Console.WriteLine($"性别: {gender}");

        // 校验码
        string checkCode = idCardNumber.Substring(17, 1);
        Console.WriteLine($"校验码: {checkCode}");
    }

    static void Main()
    {
        Console.Write("请输入您的身份证号码: ");
        string idCardNumber = Console.ReadLine();

        ParseIDCard(idCardNumber);
    }
}

运行结果:

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

定义类和方法

class DirectoryTraverser
{
    public static void TraverseDirectory(string path)
    {
        // ...
    }
}

这里定义了一个名为DirectoryTraverser的类,它包含一个静态方法TraverseDirectory,该方法接受一个字符串参数path,代表要遍历的目录路径。

遍历目录和统计文件

int totalFiles = 0;
Dictionary<string, int> fileExtensions = new Dictionary<string, int>();

初始化两个变量:totalFiles用于统计总的文件数量,fileExtensions是一个字典,用于存储每种文件扩展名及其对应的文件数量。

foreach (var directory in Directory.EnumerateDirectories(path))
{
    // ...
}

使用Directory.EnumerateDirectories方法遍历指定目录下的所有子目录。这个方法返回一个枚举器,可以迭代目录树中的所有子目录

foreach (var file in Directory.EnumerateFiles(directory))
{
    // ...
}

在每个子目录中,使用Directory.EnumerateFiles方法列出所有的文件。同样,这返回一个枚举器,可以迭代目录中的所有文件。

获取文件信息和统计

FileInfo fileInfo = new FileInfo(file);
totalFiles++;
string extension = fileInfo.Extension.ToLower();
if (!fileExtensions.ContainsKey(extension))
{
    fileExtensions.Add(extension, 1);
}
else
{
    fileExtensions[extension]++;
}

对于每个文件,创建一个FileInfo对象来获取文件信息,包括文件名和扩展名。增加totalFiles计数器,获取文件扩展名并转换为小写,以便统一处理。然后检查扩展名是否已经在fileExtensions字典中,如果不在,则添加新的键值对;如果已经存在,则增加对应的计数值。

输出结果

Console.WriteLine($"总文件数: {totalFiles}");
Console.WriteLine("文件类型统计:");
foreach (var ext in fileExtensions)
{
    Console.WriteLine($"  后缀 \"{ext.Key}\" 的文件有 {ext.Value} 个");
}

遍历完成后,输出总的文件数量和每种文件类型的统计结果。这包括打印总的文件数,以及每种文件扩展名和对应的文件数量。

异常处理

catch (UnauthorizedAccessException ex)
{
    Console.WriteLine($"无权访问目录: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"发生错误: {ex.Message}");
}

在遍历过程中,使用try-catch块来捕获并处理可能出现的异常,如UnauthorizedAccessException(当没有权限访问某个目录时抛出)和其他未指定的异常。这有助于程序在遇到错误时仍能优雅地继续运行,而不是突然崩溃。

主方法

static void Main()
{
    string path = @"C:\Your\Path"; // 修改为你要遍历的目录
    TraverseDirectory(path);
}

Main方法中,调用TraverseDirectory方法并传入要遍历的目录路径。这是程序的入口点,当程序运行时,会从这里开始执行。

源码:

using System;
using System.Collections.Generic;
using System.IO;

class DirectoryTraverser
{
    public static void TraverseDirectory(string path)
    {
        int totalFiles = 0;
        Dictionary<string, int> fileExtensions = new Dictionary<string, int>();

        try
        {
            // 遍历目录及其子目录
            foreach (var directory in Directory.EnumerateDirectories(path))
            {
                Console.WriteLine($"目录: {directory}");
                foreach (var file in Directory.EnumerateFiles(directory))
                {
                    FileInfo fileInfo = new FileInfo(file);
                    totalFiles++;

                    string extension = fileInfo.Extension.ToLower();
                    if (!fileExtensions.ContainsKey(extension))
                    {
                        fileExtensions.Add(extension, 1);
                    }
                    else
                    {
                        fileExtensions[extension]++;
                    }

                    Console.WriteLine($"  文件: {fileInfo.Name}");
                }
            }
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine($"无权访问目录: {ex.Message}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"发生错误: {ex.Message}");
        }

        Console.WriteLine($"\n总文件数: {totalFiles}");
        Console.WriteLine("文件类型统计:");
        foreach (var ext in fileExtensions)
        {
            Console.WriteLine($"  后缀 \"{ext.Key}\" 的文件有 {ext.Value} 个");
        }
    }

    static void Main()
    {
        string path = @"D:\BaiduNetdiskDownload\dj0527"; // 修改为你要遍历的目录
        TraverseDirectory(path);
    }
}

运行结果:

标签:Console,string,WriteLine,C#,Substring,str,path,z3
From: https://blog.csdn.net/m0_67996574/article/details/140157731

相关文章

  • 在QT中的QGraphicsEffect详细说明
    QGraphicsEffect 是Qt框架中用于为图形项(如 QGraphicsItem、QGraphicsPixmapItem、QWidget 等)添加视觉效果的基类。通过使用 QGraphicsEffect,你可以改变图形项的外观,如添加模糊、阴影、颜色化、透明度等效果。以下是如何使用 QGraphicsEffect 的一些基本步骤:选择或......
  • 在QT中如何通过QConicalGradient设置渐变
    在Qt中,QConicalGradient类用于创建一个锥形渐变,这种渐变是从一个中心点向四周辐射的。你可以设置中心点、渐变角度以及这些角度上对应的颜色。以下是一个使用QConicalGradient设置渐变的示例代码:#include<QPainter>#include<QConicalGradient>#include<QWidget>......
  • soft lockup – CPU
    https://help.aliyun.com/zh/ecs/support/linux-instances-of-ecs-system-no-response-the-system-log-in-bug-soft-lockup-cpu-0-stuck-for-61-s-errorhttps://www.eet-china.com/mp/a231582.htmlpanichttps://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_......
  • Clickhouse 学习(最新)
    Clickhouse-23.2.1.2537学习一、Clickhouse概述clickhouse官网网址:https://clickhouse.com/![image-20230526091704292](C:\Users\shujia\Desktop\课件\Clickhouse-23.2.1.2537学习.assets\image-20230526091704292.png)OLTP(联机事务处理系统) 例如mysql等关系型数据库......
  • 如何给虚拟机中centos7设置静态ip和能够访问外网
    1.打开终端,并进入network-scripts文件夹下(必须要root角色登录,以获取修改权限)cd/etc/sysconfig/network-scripts/2.打开ifcfg-ens33 viifcfg-ens33 3.确认虚拟机ip起始,以设置静态ip,确认网关和dns1,以设置网关掩码  4.打开ifcfg-ens33,设置静态路由,并打开网络开关......
  • MySQL-16.MVCC(多版本并发控制)
    C-16.多版本并发控制1.什么是MVCCMVCC(MultiversionConcurrencyControl),多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一事务更新的行,并且......
  • 【C语言】指针经典例题
    题1: #include<stdio.h>intmain(){inta[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));return0;}//程序的结果是什么?解答如下:  题2:#include<stdio.h>//这里告知结构体的大小是20个字节stru......
  • LeetCode 算法:路径总和 III c++
    原题链接......
  • 【C语言】指针和数组经典练习题(一)
    //一维数组inta[]={1,2,3,4};printf("%d\n",sizeof(a));printf("%d\n",sizeof(a+0));printf("%d\n",sizeof(*a));printf("%d\n",sizeof(a+1));printf("%d\n",sizeof(a[1]));printf("%d\n",sizeof(&a......
  • 【鸿蒙性能优化】基于Camera Kit,获取相机流数据传递给native,进行压缩编码
    示例场景:ATS侧启动相机,使用摄像头采集视频流数据,获取相机视频流数据传递到native侧,通过buffer模式将视频编码成MP4文件保存到沙箱路径。方案描述:具体实现步骤可分为:Step1:申请权限,启动相机。Step2:启动录制,获取视频流数据,获取一帧图像转成JPG格式保存到沙箱路径。Step3:......