根据我的问题,我想获取当前起始索引之前的第一个逗号的索引。举一个数据的例子,我有一个像这样的字符串:
Bob Green;PD,Andy Richards;BD,Frank Williams;OW,James Clack;PM
该字符串包含设置为的元素[Persons Name];[Role]
,因此名称与角色之间用;
(分号)分隔,并且每个元素之间,
均以(逗号)分隔。
字符串中的元素可以按任何顺序排列,所以我提出这个问题的原因是我想知道该角色的人名OW
。我最初的想法是获取的索引;OW,
并以某种方式从那里恢复工作。很明显,我可以从我的起始索引检查字符串中来回循环,以查看字符是否是逗号,但看起来效率低下,那么是否有更好的方法来实现呢?
编辑
为了澄清,我只想获得与角色OW相关的名称。这个角色应该只在字符串中出现一次。如果没有,那么我很高兴只得到第一次出现,我认为IndexOf(“; OW,”)会做到。我不需要其他角色或名称,只需与OW相关的名称。
同样,角色将永远只有2个字符长。正如马特·伯兰德(Matt Burland)所指出的那样,如果它在字符串的末尾,则不会带有逗号。但是,我可以将indexof修改为仅搜索“; OW”,因为角色只有2个字符长。
使用string.LastIndexOf
包含起始位置的重载:
string s = "Bob Green;PD,Andy Richards;BD,Frank Williams;OW,James Clack;PM";
int startRole = s.IndexOf(";OW");
int startName = s.LastIndexOf(',',startRole) + 1; // start at the semicolon before the role
string name s.Substring(startName,(startRole-startName));
请注意,需要考虑一些极端情况:
OWX
吗(例如可以有一个角色)?OW
角色是列表中的第一个角色,那么它前面将没有逗号OW
角色吗?如果是这样,您可以使用while
循环并仅在上一个角色字符串的末尾开始搜索。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句