我有一个动态形成的字符串,如 - part1.abc.part2.abc.part3.abc
在这个字符串中我想知道倒数第二个位置“。”所以我可以将字符串拆分为 part1.abc.part2.abc和part3.abc
让我知道有没有直接的方法来获得这个?
答案 0 :(得分:15)
string str = "part1.abc.part2.abc.part3.abc";
int ix1 = str.LastIndexOf('.');
int ix2 = ix1 > 0 ? str.LastIndexOf('.', ix1 - 1) : -1;
总是有Regexes(和jQuery)的爱好者,所以我会提供一个Regex解决方案(对于你必须等待的jQuery解决方案:-)):
var match = Regex.Match(str, @"\.[^\.]*\.", RegexOptions.RightToLeft);
int ix = match.Success ? match.Index : -1;
(请注意,我是一个仇恨的正则表达式,我会把它给你,这样你就可以有足够的绳子让自己挂起来。)
请注意我正在使用RegexOptions.RightToLeft
选项,以便正则表达式从最后一个字符开始。
答案 1 :(得分:7)
您可以使用String.LastIndexOf('.')
方法获取上一个句号/句点的位置,然后在第二次调用LastIndexOf('.')
时使用该位置来获取最后一个但是一个,例如:< / p>
string aString = "part1.abc.part2.abc.part3.abc";
int lastPos = aString.LastIndexOf('.');
int lastPosButOne = aString.LastIndexOf('.', lastPos - 1);
但是我建议使用String.Split('.')
来给你一个字符串部分的数组,然后你可以选择最后一个,例如。
string aString = "part1.abc.part2.abc.part3.abc";
string[] parts = aString.Split('.');
string lastPartButOne = parts[parts.Length - 1];
答案 2 :(得分:4)
这是另一种解决方案:
string aString = "part1.abc.part2.abc.part3.abc";
// Getting string until last dot
var untilLastDot = aString.Substring(0, aString.LastIndexOf("."));
// Now we have string until last dot and last dot here will be last but one
// and getting text from last but one dot to end
string lastWordButOne = aString.Substring(untilLastDot.LastIndexOf(".") + 1);
// Result: part3.abc
希望有所帮助,谢谢!
答案 3 :(得分:2)
据我所知,没有开箱即用的解决方案。一种方法是找到最后一个“。”使用字符串的LastIndexOf,然后再次搜索最后一个点,这次使用允许您指定startindex和count的重载,使用第一个调用的索引作为计数参数。
答案 4 :(得分:1)
您可以使用String.Split()
方法,该方法返回已拆分项目的数组。然后,您可以连接前2个并留下最后一个。
答案 5 :(得分:1)
尝试字符串类LastIndexOf方法。
答案 6 :(得分:1)
在这种情况下,"part1.abc.part2.abc.part3.abc".Split('.')
如何获得所有子串的数组
希望这有帮助。
答案 7 :(得分:1)
LastIndexOf应该做你想做的事。做两次。
答案 8 :(得分:1)
基于@bitbonk的回答。我使用下面的代码,它是RAT()
的{{1}}函数的副本。
VFP
答案 9 :(得分:0)
这将是解决方案,具有最佳性能(它可能不会比这更快和内存轻量级,除非你想要不安全的路由):
public static int LastIndexOf(this string str, char charToSearch, int repeatCound)
{
int index = -1;
for(int i = str.Length - 1; i >= 0, numfound < repeatCound)
{
if(str[i] == charToSearch)
{
index = i;
numfound++;
}
}
return index;
}