获取字符串的一部分

时间:2014-10-27 07:31:23

标签: c# string

我有一个字符串

"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只是一个例子。它可以是任何数字数据,例如196,145等

7 个答案:

答案 0 :(得分:2)

string.Contains无济于事:我们知道它已经存在至少一次了。我会用:

int otherLocation = addUcoid.IndexOf(getucoid);

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

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

并与-1进行比较;第二种方法在下划线处停止,因此无法从最后找到实例。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

当你说“字符串中的结尾”存在时,你的意思是它是否存在于字符串中的任何位置?你可以用.Contains()来获取它。

bool inTheString = addUcoid.Contains(getucoid);

此外:

仅供参考,您的代码:

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

可以简化缩写为:

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

编辑:

嗯,马克格拉维尔正确地指出,无论如何弦都在那里。如果你想知道是否有另一个字符串实例(除了getucoid):

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

答案 3 :(得分:0)

使用String.EndsWith方法查找。

http://msdn.microsoft.com/en-us/library/2333wewz%28v=vs.110%29.aspx

 string s="cmp197_10_27_147ee7b825-2a3b-4520-b36c-bba08f8b0d87_TempDoc";
    bool isends=s.EndsWith("197");//returns false;
    s="cmp197_10_27_147ee7b825-2a3b-4520-b36c-bba08f8b0d87_TempDoc_197";
    isends=s.EndsWith("197");//returns true;

答案 4 :(得分:0)

可以使用String.Contains()http://msdn.microsoft.com/en-us/library/dy85x1sa%28v=vs.110%29.aspx

检查是否存在子字符串

假设你已经删除了最终的&#34; _197&#34;检查它是否存在后,如果Contains("197")是子字符串,则在字符串上调用"197"将返回true,如果不是,则返回false。

答案 5 :(得分:0)

我怀疑你只是想知道这最后一部分是否是数字:

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

答案 6 :(得分: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());
}