2014-10-27 88 views
1

的一部分,我有一个字符串作为获取字符串

"cmp197_10_27_147ee7b825-2a3b-4520-b36c-bba08f8b0d87_TempDoc_197" 

我想获取最后的数字(即197) 为了获得同样的我在下面的代码

int lastUnderscore = addUcoid.LastIndexOf('_'); 
string getucoid = addUcoid.Substring(lastUnderscore).TrimStart('_'); 

getucoid串实施正确地获取数字部分。现在的问题是我还必须检查数字是否出现在字符串中,即字符串可以是像

"cmp197_10_27_147ee7b825-2a3b-4520-b36c-bba08f8b0d87_TempDoc" 

如何执行这样的字符串的检查,该部分(197)是否存在于串或不到底。

这里197仅仅是一个example.It可以是任何数字数据,例如196145等

+0

您的意思是说您想要检索任何给定字符串中的_last_数_的发生次数? – 2014-10-27 07:40:43

+0

tip:'string getucoid = addUcoid.Substring(lastUnderscore + 1);'(只要你检查lastUnderscore是否先是非负数) – 2014-10-27 07:45:49

回答

0

我怀疑你只是想知道,如果这最后一部分是一个数字或不:

bool isNumeric = Regex.IsMatch(getucoid, @"^\d+$"); 
0

当你说存在于“字符串中结束”,你的意思是,如果它在字符串中的任何地方存在?你可以做一个.Contains()来获得它。

bool inTheString = addUcoid.Contains(getucoid); 

另外:

仅供参考,您的代码:

int lastUnderscore = addUcoid.LastIndexOf('_'); 
string getucoid = addUcoid.Substring(lastUnderscore).TrimStart('_'); 

可以简化缩短到:

string getucoid = addUcoid.Split('_').Last(); 

编辑:

Ehm,Marc Gravell正确地指出,字符串是无论如何。如果您想了解如果字符串的另一个实例是存在的(除了getucoid):

int lastUnderscore = addUcoid.LastIndexOf('_'); 
string getucoid = addUcoid.Split('_').Last(); 
bool inTheString = addUcoid.Substring(0,lastUnderscore).Contains(getucoid); 
+0

“可以简化为:”...代码如图所示不过,问题更有效率。我只是做一个字符串getucoid = addUcoid.Substring(lastUnderscore + 1);' – 2014-10-27 07:44:57

+0

有趣!搜索Split和Indexof比较,但我找不到任何。 – Tyress 2014-10-27 07:55:19

+0

你可以自己推论出来;这更加昂贵:从一个单一的开始/长度对创建一个单独的子串,或者创建一个*数组*包含*每个*组件子串,在一个循环中检测到开始/长度对给定令牌的所有实例...? – 2014-10-27 08:25:23

2

string.Contains不会帮助:我们知道它的存在至少一次了。我会使用:

int otherLocation = addUcoid.IndexOf(getucoid); 

并将其与lastUnderscore进行比较。如果otherLocation是非负数且小于lastUnderscore,那么它也在较早的位置。您还可以使用:

int otherLocation = addUcoid.IndexOf(getucoid, 0, lastUnderscore); 

并与-1进行比较;第二种方法停在下划线处,所以不会从最后找到实例。

1

我认为正则表达式是最简单的方法。如果match.Success为真,则找到数字。

Match match = System.Text.RegularExpressions.Regex.Match(addUcoid, @"(?<=_)\d+$"); 
if(match.Success) 
{ 
    int i = int.Parse(match.Value); 
} 
0

您可以使用LINQ(也检查,如果最后一个字符是一个数字):

string str = "cmp197_10_27_147ee7b825-2a3b-4520-b36c-bba08f8b0d87_TempDoc_197"; 

if (Char.IsDigit(str.Last())) 
{ 
    string digits = new string(str.Reverse().TakeWhile(c => Char.IsDigit(c)).Reverse().ToArray()); 
}