如何获取字符串值的最后一个索引

时间:2012-07-26 15:25:58

标签: c#

我知道这是一个愚蠢的问题,但我真的很困惑。以下是代码:

PropertyInfo[] requestPropertyInfo;
requestPropertyInfo = typeof(CBNotesInqAndMaintRequest).GetProperties();

CBNotesInqAndMaintRequest包含请求数据成员noteline1 --- noteline18。一旦我读了一个数据成员的名字,我想得到它的最后一个索引。例如。如果请求对象的名称是“noteline8”,我想将索引设为8。

为此,我写了以下代码:

foreach (PropertyInfo reqPropertyInfo in requestPropertyInfo)
{
  index = reqPropertyInfo.Name.LastIndexOf("noteline");
}

但是上面的代码将索引返回为0.请帮助

8 个答案:

答案 0 :(得分:3)

这就是你想要的吗?

foreach (PropertyInfo reqPropertyInfo in requestPropertyInfo)
{
  index = int.Parse(reqPropertyInfo.Name.Replace("noteline",""));
}

答案 1 :(得分:2)

看起来你想在'noteline'之后得到这个数字。如果是这样的话:

index = int.Parse(reqPropertyInfo.Name.SubString(8));

答案 2 :(得分:2)

index = reqPropertyInfo.Name.Length -1;

如果是“noteline18”,你想要找到1而不是8的索引,那么

index = reqPropertyInfo.Name.LastIndexOf('e') + 1

答案 3 :(得分:1)

你得到0的原因是它返回整个字符串“noteline”的最后一个索引,当然,它始终位于第0位。如果你有“notelinenoteline”,它将是返回“8”。

现在,关于你想要什么回来:

index = reqPropertyInfo.Name.Substring(8);

答案 4 :(得分:1)

我创建了一个RegEx解决方案,它与属性名称无关,但是抓取最后的数字并返回一个整数

static int GetLastInteger( string name ) {

    int value;
    if( int.TryParse( name, out value ) ) {
        return value;
    }
    System.Text.RegularExpressions.Regex r = 
        new System.Text.RegularExpressions.Regex( @"[^0-9](\d+\b)" );

    System.Text.RegularExpressions.Match m = 
        r.Match( name );

    string strValue = m.Groups[1].Value;
    value = ( int.Parse( strValue ) );
    return value;
}

可以在你的例子中使用:

foreach (PropertyInfo reqPropertyInfo in requestPropertyInfo)
{
  index = GetLastInteger(reqPropertyInfo.Name);
}

答案 5 :(得分:0)

LastIndexOf返回您要查找的字符串的起始索引,这就是它返回0的原因。

答案 6 :(得分:0)

修改

考虑到你的评论,你应该这样做:

Int32 index = Convert.ToInt32(reqPropertyInfo.Name.Replace("noteline",""));

答案 7 :(得分:0)

我认为最简单的答案是获取字符串的计数然后将其减去1,将为您提供该字符串的最后一个索引,如下所示: -

int lastIndex= sampleString.Count-1; //sampleString is the string here.