C# 基础知识总结:字符串处理、随机数生成、日期时间操作

引言

在日常的软件开发工作中,我们经常需要处理字符串、生成随机数以及操作日期时间等。本文将总结一些在C#中常见的字符串处理技巧、随机数生成方法以及日期时间的操作。

字符串处理

常用API

//  字符串中有很多的方法供我们使用,主要是用来处理字符串
1.Concat     2.Contains     3.IndexOf     4.LastIndexOf     5.IndexOfAny     6.Substring     7.Replace 8.CopyTo 
9.StartsWith     10.EndsWith     11.Equals     12.Insert     13.string.IsNullOrEmpty     14.string.Join
15.Split     16.ToCharArray     17.Remove     18.ToUpper,ToLower     19.TrimStart,TrimEnd,Trim
20.PadLeft,PadRight     21.Format

1.拼接字符串(Concat)
string s1 = "abc", s2 = "123", s3 = "666";
string s4= string.Concat(s1, s2, s3);
Console.WriteLine(s5); // abc123666

2.判断字符串中,是否存在某些字符   区分大小写、相邻的字符位置要一样(Contains)
s5=“ abc123666”
bool b = s5.Contains("c1");
Console.WriteLine(b); // True
b = s5.Contains("ba");
Console.WriteLine(b); // False
b = s5.Contains("AB");
Console.WriteLine(b); // False

3.查询字符串中某个字符出现的位置(索引位置)   从前往后查询(IndexOf)//方法使用时,第一个字符从0开始
string s6 = "ABCabc123c";
int i = s6.IndexOf("a");
Console.WriteLine(i); // 3
Console.WriteLine(s6.IndexOf("bc")); // 4    拿到的是搜索到的第一个字符的索引位置
Console.WriteLine(s6.IndexOf("6"));  // -1   如果搜索的字符串不存在,则返回-1
Console.WriteLine(s6.IndexOf("c"));  // 5    如果要搜索的字符串出现多次,返回的是第一个的索引位置
Console.WriteLine(s6.IndexOf("b", StringComparison.OrdinalIgnoreCase));  //  1 默认情况下是区分大小写的。   如果想要忽略大小写

4.从后往前查询(LastIndexOf)   //方法使用时,第一个字符从0开始
Console.WriteLine(s6.LastIndexOf("c"));  // 9
Console.WriteLine(s6.LastIndexOf("c", 8));  // 5

Console.WriteLine(s6.IndexOf("c", 6));  // 9

5.查询字符串中第一次出现的指定字符数组中任意一个字符的位置,
查询字符是否为a  c 中的 某一个,  如果是则返回对应的索引位置 
(IndexOfAny)  //方法使用时,第一个字符从0开始 
Console.WriteLine(s6.IndexOfAny(new char[] { 'a', 'c' })); // 3
Console.WriteLine(s6.IndexOfAny(new char[] { 'a', 'c', 'A' })); // 0
// 从索引2开始往后查找
Console.WriteLine(s6.IndexOfAny(new char[] { 'a', 'c', 'A' }, 2)); // 3
// 从索引6开始往后查找3个字符
Console.WriteLine(s6.IndexOfAny(new char[] { 'a', 'c', 'A' }, 6, 3)); // -1 从索引6开始,开始带6自身

Console.WriteLine(s6.LastIndexOfAny(new char[] { 'a', 'c', 'A' })); // 9

6.截取字符串(Substring)//方法使用时,第一个字符从0开始
string s7 = "abcabcabc";
Console.WriteLine(s7.Substring(2)); // cabcabc     从索引为2的位置开始截取,带2自身一直截取到最后
Console.WriteLine(s7.Substring(2, 3)); // cab      从索引为2的位置开始截取,带2自身往后截取3个字符

7.替换(Replace)
string s8 = "唱跳rap打篮球";
string s9 = s8.Replace("打", "拍");
Console.WriteLine(s9);  // 唱跳rap拍篮球
string s10 = s8.Replace("篮球", "乒乓球");
Console.WriteLine(s10); // 唱跳rap打乒乓球
string s11 = s9.Replace("篮球", "乒乓球");
Console.WriteLine(s11); // 唱跳rap拍乒乓球
===========================================================================================

8.复制   从字符串中复制一部分字符到一个字符数组中(CopyTo)//方法使用时,第一个字符从1开始
string s2 = "CBA123sadjsaijfiasjfilsdjflsjfls";
char[] chars = new char[10];    //10 代表新的字符串长度
// 参数1:从字符串中开始复制的位置
// 参数2:复制到哪个数组
// 参数3:从数组中哪个位置开始放
// 参数4:复制的长度
s2.CopyTo(1, chars, 2, 3);
for (int i = 0; i < chars.Length; i++)
{
    // 2 B   3 A   4 1
    Console.WriteLine($"{chars[i]}");
}
// char数组  转为字符串
string charsString = new string(chars);
Console.WriteLine("复制的结果是:" + charsString);

9.判断是否是以某些字符开头(StartsWith)
string name1 = "张三";
Console.WriteLine(name1.StartsWith("张")); // True
Console.WriteLine(name1.StartsWith("张三")); // True
string name2 = "老王王";
Console.WriteLine(name2.StartsWith("张")); // False
string name3 = "张三老王";
Console.WriteLine(name3.StartsWith("张三")); // True

10.判断是否是以某些字符结尾(EndsWith)
Console.WriteLine(name1.EndsWith("三")); // True
Console.WriteLine(name1.EndsWith("张三")); // True
Console.WriteLine(name2.EndsWith("老王")); // Flase
Console.WriteLine(name2.EndsWith("王"));  // True

11.判断两个字符串是否相同   "123" == "123"(Equals)
Console.WriteLine(name1.Equals("张三"));  // True
string name4 = "John";
Console.WriteLine(name4.Equals("John"));  // True
Console.WriteLine(name4.Equals("john")); // False   区分大小写
Console.WriteLine(name4.Equals("john", StringComparison.OrdinalIgnoreCase));  // 不区分大小写     True

12.在指定的索引位置插入字符,生成新的字符串(Insert)//方法使用时,第一个字符从1开始
string s5 = "ABCabc123c";
string s6 = s5.Insert(2, "蔡徐坤");
Console.WriteLine(s6);  // AB蔡徐坤Cabc123c

13.判断变量是否为null 或者 空字符串(string.IsNullOrEmpty)
string s7 = null;
Console.WriteLine(string.IsNullOrEmpty(s7));  // True
s7 = "";
Console.WriteLine(string.IsNullOrEmpty(s7));  // True
s7 = " ";
Console.WriteLine(string.IsNullOrEmpty(s7));  // False  中间不能有空格

14.将字符数组或者字符串数组  拼接成一个字符串(string.Join)
char[] cs = new char[] { 'a', 'b', 'c' };
Console.WriteLine(new string(cs)); // abc

//可以自定义连接符
string s8 = string.Join("", cs);
Console.WriteLine(s8);  // abc
s8 = string.Join("-", cs);
Console.WriteLine(s8);  // a-b-c
s8 = string.Join("1", cs);
Console.WriteLine(s8);  // a1b1c

string[] ss = new string[] { "aa", "bb", "cc" };
s8 = string.Join("", ss);
Console.WriteLine(s8); // aabbcc
s8 = string.Join("~", ss);
Console.WriteLine(s8); // aa~bb~cc

15.使用指定的字符将字符串分割(Split)
string s11 = "张三,李四,王五,赵六,蔡徐坤,吴亦凡";
string[] s11s = s11.Split(',');  // ["张三" , "李四", "王五", "赵六",“蔡徐坤”,"吴亦凡"]
for (int i = 0; i < s11s.Length; i++)
{
    Console.WriteLine(s11s[i]);
}

16.将字符串转为字符数组(ToCharArray)
char[] chars1 = s11.ToCharArray();  // ['张', '三', ',', '李', '四' ...]
for (int i = 0; i < chars1.Length; i++)
{
    Console.WriteLine(chars1[i]);
}

17.删除字符(Remove)//方法使用时,第一个字符从1开始
//s8=第14个里面的s8,也就是s8=aa~bb~cc
string s9 = s8.Remove(6);
Console.WriteLine(s9);// aa~bb~   从指定位置(不带第6个字符本身) 删除后面所有的字符

s9 = s8.Remove(3, 2); //从第三个字符开始,往后面删除两个字符
Console.WriteLine(s9); // aa~~cc

18.大小写转换(转换大写:ToUpper,转换小写:ToLower)
string s12 = "aBabadBbSDFSFdas测试";
// 将小写全部转为大写
string s13 = s12.ToUpper();
Console.WriteLine(s13);  // ABABADBBSDFSFDAS测试
// 将大写全部转为小写
s13 = s12.ToLower();
Console.WriteLine(s13);  // ababadbbsdfsfdas测试

19.去除空格(去除前空格:TrimStart,后:TrimEnd,前后:Trim,全部:可以使用Replace方法替换,将空格转化为空)
string s14 = "     12    34      ";
// 去除前面空格
Console.WriteLine(s14.TrimStart());
// 去除后面空格
Console.Write(s14.TrimEnd());
// 前后都去除
Console.Write(s14.Trim());
Console.WriteLine("测试");

// 可以去除所有的空格
Console.WriteLine(s14.Replace(" ", ""));

20.填充空格(左填充:PadLeft,又填充:PadRight)
string s15 = "123";
//往字符串左边填充
string s16 = s15.PadLeft(8); // 5个空格 + "123"
Console.Write(s16);
Console.WriteLine("测试");
//往字符串右边填充
Console.Write(s15.PadRight(8));
Console.WriteLine("测试");

21.字符串格式化(Format)
string username = "蔡徐坤";
int age = 18;
char sex = '男';
Console.WriteLine("我的名字是{0},年龄是{1},性别是{2}", username, age, sex);
//Test("我的名字是{0},年龄是{1},性别是{2}", username, age, sex);  //报错,不能这样用

string s17 = string.Format("我的名字是{0},年龄是{1},性别是{2}", username, age, sex);
Test(s17);

Console.WriteLine(string.Format("第0个:{0},666", "哈")); // 第0个:哈,666
// 4表示 此处至少占用4个字符的位置,如果插入的字符的个数不足占位的个数,会往前面填充空格
Console.WriteLine(string.Format("第0个:{0,4},666", "哈")); // 第0个:   哈,666
// 前面加上人民币符号   :Cn 以货币格式显示,并保留n位小数
Console.WriteLine(string.Format("我的存款:{0:C5}", 123456799.87654321)); // 我的存款:¥123,456,799.88
Console.WriteLine(string.Format("我的存款:{0:F2}", 123456799.87654321));  // 保留n位小数

static void Test(string s)
{

}

字符串构建器 (StringBuilder)

  • 性能优势:

    • StringBuilder 是可变的,适用于频繁的字符串修改。
    • 相比于不可变的 String 类型,StringBuilder 在大量修改时能显著减少内存分配。
StringBuilder sb = new StringBuilder(50000);
for (int i = 0; i < 50000; i++)
{
    sb.Append(i);
}

随机数生成

使用Random类

Random random = new Random(10);
Console.WriteLine(random.Next()); // 生成随机整数
Console.WriteLine(random.Next(2)); // 生成0或1
Console.WriteLine(random.Next(10, 15)); // 生成10到14之间的随机数

 使用GUID

Console.WriteLine(Guid.NewGuid()); // 生成全局唯一标识符

使用MD5

// MD5用于生成消息摘要
// 不在本文中展开,但可以使用`System.Security.Cryptography`命名空间下的相关类

日期时间操作

获取当前时间

DateTime time = DateTime.Now;
Console.WriteLine(time); // 输出: 当前系统时间
  1. 获取年份:time.Year
  2. 获取月份:time.Month
  3. 获取日  :time.Day
  4. 获取小时:time.Hour
  5. 获取分钟:time.Minute
  6. 获取秒  :time.Second
  7. 获取毫秒:time.Millisecond
  8. 获取今天是今年的第几天:time.DayOfWeek
  9. 获取今天时星期几:time.DdayOfWeek   结果是0-6.

格式化时间 

Console.WriteLine(time.ToString("yyyy-MM-dd HH:mm:ss")); // 输出: 2024-03-12 11:31:57

格式化时字母表示的含义:2023/10/27 14:30:28

  1. yy    23
  2. yyyy  2023
  3. M    10月27日
  4. MM  10
  5. MMM 10月
  6. MMMM 十月
  7. d     2023/10/27
  8. 今天是d号   今天是27号
  9. dd   27
  10. ddd   周一
  11. dddd  星期一
  12. h     12小时进制   
  13. H    24小时进制
  14. hh   01  02  03 …… 11  12
  15. HH  01  02   03  ……  22  23  24

时间计算

DateTime targetDate = new DateTime(2026, 1, 1);
TimeSpan timeSpan = targetDate - DateTime.Now;
Console.WriteLine($"到2026年1月1日还有{timeSpan.Days}天");

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值