我有一个动态生成的字符串,如下所示 - part1.abc.part2.abc.part3.abc
我想知道倒数第二个 "." 的位置,以便我可以将字符串分割为 part1.abc.part2.abc 和 part3.abc
请告诉我是否有任何直接方法可用于获取此信息?
我有一个动态生成的字符串,如下所示 - part1.abc.part2.abc.part3.abc
我想知道倒数第二个 "." 的位置,以便我可以将字符串分割为 part1.abc.part2.abc 和 part3.abc
请告诉我是否有任何直接方法可用于获取此信息?
string str = "part1.abc.part2.abc.part3.abc";
int ix1 = str.LastIndexOf('.');
int ix2 = ix1 > 0 ? str.LastIndexOf('.', ix1 - 1) : -1;
总是有正则表达式(和jQuery)的爱好者,因此我将给出一个正则表达式解决方案(如果您需要jQuery解决方案,则必须等待 :-)):
var match = Regex.Match(str, @"\.[^\.]*\.", RegexOptions.RightToLeft);
int ix = match.Success ? match.Index : -1;
请注意,我是一个正则表达式的反对者,我把代码给你只是为了让你有足够的绳子去自杀(如果你真这么选择的话)。
请注意,我正在使用RegexOptions.RightToLeft
选项,以便正则表达式从最后一个字符开始匹配。
String.LastIndexOf('.')
方法来获取最后一个句点的位置,然后再使用第二个LastIndexOf('.')
调用来获取倒数第二个,例如: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];
这里是另一种解决方案:
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
在这种情况下,"part1.abc.part2.abc.part3.abc".Split('.')
会得到一个包含所有子字符串的数组。
希望这可以帮到你。
VFP
中 RAT()
函数的复制品。 public static int RightIndexAt(this string expressionToSearch, char charToSearch, int occurence)
{
//Validate parameter
if (occurence < 1)
return -1;
int index = -1;
int numfound = 0;
for (int count = expressionToSearch.Length - 1; count >= 0; count--)
{
if (expressionToSearch[count].Equals(charToSearch))
{
index = count;
numfound++;
}
if (numfound.Equals(occurence))
break;
}
return numfound < occurence ? -1 : index;
}
这将是最佳性能的解决方案(除非您想采用不安全的方法,否则它可能不会比这更快速和轻量级):
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;
}
a.b.c
分割成a, b, c
吗? - Deeptechtons