StringBuilder - 查找字符的最后一个索引

时间:2014-05-13 08:52:59

标签: c# .net

我想在StringBuilder中找到特定的最后一个字符 我知道,我可以用while()来解决它,但是有一个构建它可以轻松地做到这一点吗?

例如:

private static StringBuilder mySb = new StringBuilder("");
mySb.Add("This is a test[n] I like Orange juice[n] Can you give me some?");

现在:它应该找到]并给我一个可能性。喜欢:40

提前致谢

2 个答案:

答案 0 :(得分:4)

由于没有内置方法,并且始终从string通过StringBuilder创建ToString效率非常低,因此可以为此目的创建扩展方法:

public static int LastIndexOf(this StringBuilder sb, char find, bool ignoreCase = false, int startIndex = -1, CultureInfo culture = null)
{
    if (sb == null) throw new ArgumentNullException(nameof(sb));
    if (startIndex == -1) startIndex = sb.Length - 1;
    if (startIndex < 0 || startIndex >= sb.Length) throw new ArgumentException("startIndex must be between 0 and sb.Lengh-1", nameof(sb));
    if (culture == null) culture = CultureInfo.InvariantCulture;

    int lastIndex = -1;
    if (ignoreCase) find = Char.ToUpper(find, culture);
    for (int i = startIndex; i >= 0; i--)
    {
        char c = ignoreCase ? Char.ToUpper(sb[i], culture) : (sb[i]);
        if (find == c)
        {
            lastIndex = i;
            break;
        }
    }
    return lastIndex;
}

将其添加到静态,可访问(扩展)类,然后您可以这样使用它:

StringBuilder mySb = new StringBuilder("");
mySb.Append("This is a test[n] I like Orange juice[n] Can you give me some?");
int lastIndex = mySb.LastIndexOf(']');  // 39

答案 1 :(得分:-3)

使用StringBuilder方法将toString转换为字符串,然后您可以使用LastIndexOf方法。

mySb.ToString().LastIndexOf(']');

LastIndexOf

  

报告最后一次出现的从零开始的索引位置   此实例中指定的Unicode字符或字符串。方法   如果在此实例中找不到字符或字符串,则返回-1。

     

此成员已超载。有关此成员的完整信息,   包括语法,用法和示例,单击重载中的名称   列表。