『7x24小时有问必答』

前言

作为一名 C# 程序员,IndexOf  方法可能是你每天都在使用却从未深入挖掘的工具。
"IndexOf?不就是找字符串位置嘛!"——如果你也这么想,那可就错过太多好东西啦!
作为一名 C# 老司机,我发现  IndexOf  这个小家伙其实是个隐藏的瑞士军刀,不仅能帮你找到字符的位置,还能完成许多意想不到的任务。
今天,就让我们一起来扒一扒  IndexOf  那些不为人知的另类用法,保证让你惊呼:"原来还能这样用?!"

IndexOf 另类用法

检查字符串是否存在(比Contains更灵活)
有时候我们需要检查一个字符串是否包含某个特定的字符或子串,IndexOf  可以轻松搞定:
// Contains 只能返回 true 或 false,

// IndexOf 能返回更多的值,可以结合其他条件实现更复杂的验证逻辑

if  (email.IndexOf("@") !=  -1)  

{

      Console.WriteLine("这像是个邮箱地址!");

}

从特定位置开始搜索
假设你想在字符串中找到第二个出现的某字符或子串,IndexOf  可以帮助你从指定位置继续搜索:
string  log =  "Error:404;Error:500;Error:200";

int  firstError = log.IndexOf("Error");

int  secondError = log.IndexOf("Error", firstError +  1);  // 从第一个 Error 后面开始搜索

Console.WriteLine($"第二个 Error 出现在索引位置:  {secondError}");

// 输出结果:

// 第二个 Error 出现在索引位置: 18

反向搜索(LastIndexOf的好搭档)
有时候我们需要找到某个字符或子串最后一次出现的位置,这时可以使用  LastIndexOf
string  path =  @"C:\Users\Jacky\Documents\report.docx";

int  lastSlash = path.LastIndexOf(@"\");

string  fileName = path.Substring(lastSlash +  1);

Console.WriteLine($"文件名是:  {fileName}");

// 输出结果:

// 文件名是: report.docx

结合 Substring 提取关键信息
在解析复杂字符串时,IndexOf  和  Substring  是一对黄金搭档:
string  data =  "Name=张三;Age=30;Occupation=程序员";

int  ageStart = data.IndexOf("Age=") +  4;

int  ageEnd = data.IndexOf(";", ageStart);

string  age = data.Substring(ageStart, ageEnd - ageStart);

Console.WriteLine($"年龄是:  {age}");

// 输出结果:

// 年龄是: 30

检查字符串开头(比StartsWith更灵活)
有时我们需要判断一个字符串是否以某个特定前缀开头,除了  StartsWith,我们还可以使用  IndexOf
string  url =  "https://example.com";

bool  isSecure = url.IndexOf("https://") ==  0;

数组中的IndexOf(不只是字符串哦!)
IndexOf  不仅适用于字符串,还能用于数组。假设我们要在一个整数数组中查找某个值的位置:
int[] numbers = {  1,  3,  5,  7,  9  };

int  index = Array.IndexOf(numbers,  5);  // 返回2

忽略大小写搜索
默认情况下,IndexOf  是区分大小写的。如果我们想忽略大小写进行搜索,可以使用  StringComparison  枚举:
string  text =  "Hello WORLD";

int  index = text.IndexOf("world", StringComparison.OrdinalIgnoreCase);

结合LINQ实现高级查询
IndexOf  可以与 LINQ 结合使用,实现更复杂的查询操作:
List<string> files =  new  List<string> {  "a.txt",  "b.doc",  "c.txt"  };

var  txtFiles = files.Where(f => f.IndexOf(".txt") !=  -1).ToList();

Console.WriteLine($"所有 .txt 文件:  {string.Join(", ", txtFiles)}");

// 输出结果:

// 所有 .txt 文件: a.txt, c.txt

快速统计出现次数
有时我们需要统计某个子串在字符串中出现了多少次,IndexOf  可以帮我们实现:
string  sentence =  "the quick brown fox jumps over the lazy dog";

int  count =  0;

int  index =  0;

while  ((index = sentence.IndexOf("the", index)) !=  -1)

{

      count++;

      index +=  "the".Length;

}

Console.WriteLine($"'the' 出现了  {count}  次");

// 输出结果:

// 'the' 出现了 2 次

解析CSV数据(简易版)
IndexOf  还可以用来解析简单的 CSV 数据:
string  csvLine =  "John,Doe,30,Programmer";

List<string> values =  new  List<string>();

int  start =  0;

while  (start < csvLine.Length)

{

       int  end = csvLine.IndexOf(",", start);

       if  (end ==  -1) end = csvLine.Length;

      values.Add(csvLine.Substring(start, end - start));

      start = end +  1;

}

总结

看吧,IndexOf 远不止是"找位置"那么简单!从字符串处理到数据解析,这个小方法藏着大智慧。
最好的工具往往是那些看似简单却内涵丰富的。IndexOf就是这样一个宝藏方法,值得你深入挖掘!
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]  社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注加群

推荐阅读

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码