C#中如何从拆分后的字符串提取动态变化的Level数值?
如何提取动态变化的Level数值?
我正在开发一款游戏,已经完成了字符串拆分操作,但不知道怎么截取字符串并输出指定段的内容。
现有代码如下:
text = "Username:King100 ID:100 Level:10"; string[] splittext = text.Split(' '); foreach (var texs in splittext) { Console.WriteLine(texs); }
当前输出为:
Username:King100 ID:100 Level:10
我希望在控制台中显示Level对应的数值(该数值会动态变化,如10、100、1000等),请问该如何实现?
回答
Hey,我来给你几个实用的解决方案,都是针对你这个场景优化的:
方案1:遍历数组匹配Level项后截取
你已经把原字符串拆成了单个的键值对(比如Level:10),只需要遍历这个数组,找到以Level:开头的元素,再把冒号后面的内容截出来就好:
string text = "Username:King100 ID:100 Level:10"; string[] splittext = text.Split(' '); foreach (var item in splittext) { // 检查当前项是否为Level相关内容 if (item.StartsWith("Level:")) { // "Level:"共6个字符,从索引6开始截取后面的数值部分 string levelValue = item.Substring(6); Console.WriteLine("当前Level数值:" + levelValue); // 找到目标后直接跳出循环,提升效率 break; } }
方案2:用LINQ快速定位(需引用System.Linq)
如果你熟悉LINQ语法,能写出更简洁的代码直接定位目标项:
using System.Linq; string text = "Username:King100 ID:100 Level:10"; string[] splittext = text.Split(' '); // 找到第一个以Level:开头的元素,截取冒号后的内容;用?.避免空引用异常 string levelValue = splittext.FirstOrDefault(item => item.StartsWith("Level:"))?.Substring(6); if (!string.IsNullOrEmpty(levelValue)) { Console.WriteLine("当前Level数值:" + levelValue); } else { Console.WriteLine("未找到Level信息"); }
方案3:更健壮的键值对拆分法
如果你的格式固定为Key:Value,可以把每个拆分后的项再按冒号拆分,这种方式更灵活,就算键名长度变化也不会出错:
string text = "Username:King100 ID:100 Level:10"; string[] splittext = text.Split(' '); foreach (var item in splittext) { // 将单个键值对拆分为键和值两部分 string[] keyValue = item.Split(':'); // 确保拆分成功且键为Level if (keyValue.Length == 2 && keyValue[0] == "Level") { Console.WriteLine("当前Level数值:" + keyValue[1]); break; } }
这几个方案里,方案3的鲁棒性最好,就算以后键名改成Lv:或者其他形式,只需要调整判断条件即可,推荐优先使用这个方案!
内容的提问来源于stack exchange,提问作者Freddy Gerogin
相关产品推荐
相关产品推荐

