I have a dynamically formed string like - part1.abc.part2.abc.part3.abc
In this string I want to know position of second to last \".\" so that i can split string as
Based on @bitbonk's answer. I used below code which is a replica of RAT()
function of VFP
.
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;
}
As far as I know there is no out-of-the-box solution. One approach would be to find the last "." with string's LastIndexOf, and then search for the last point again, this time using the overload that lets you specify the startindex and count, using the index of the first call as parameter to count.
Try string class LastIndexOf method.
You can use the String.LastIndexOf('.') method to get the position of the last full-stop/period, then use that position in a second call to LastIndexOf('.')
to get the last but one, e.g.:
string aString = "part1.abc.part2.abc.part3.abc";
int lastPos = aString.LastIndexOf('.');
int lastPosButOne = aString.LastIndexOf('.', lastPos - 1);
But I'd recommend using String.Split('.') which will give you an array of the string parts, then you can take the last but one, e.g.
string aString = "part1.abc.part2.abc.part3.abc";
string[] parts = aString.Split('.');
string lastPartButOne = parts[parts.Length - 1];
You can use String.Split() method, which returns an array of the splitted items. You can then concatenate the first 2 and leave the last one.
What about "part1.abc.part2.abc.part3.abc".Split('.')
in this case you will get an Array of all the substrings
Hope this helps.