从字符串中获取倒数第二个字符位置

时间:2011-10-13 09:14:34

标签: c#

我有一个动态形成的字符串,如 - part1.abc.part2.abc.part3.abc

在这个字符串中我想知道倒数第二个位置“。”所以我可以将字符串拆分为 part1.abc.part2.abc和part3.abc

让我知道有没有直接的方法来获得这个?

10 个答案:

答案 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;
}