检查第一个字符是否为数字

时间:2017-12-12 14:34:29

标签: c#

我需要检查字符串的第一个字符是否为数字,然后我尝试使用以下字符:

if(char.IsDigit(value[0]))
      value = value.Remove(0,1);

这适用于这样的字符串:" 1ABCDEF"。

但是当字符串如下所示时出现问题:" 1234ABC"?

如何删除开头的每个数字? 的更新 我只想删除开头的数字,而不是全部! 当字符串看起来像这样:" 123ABCD123123"检查后的字符串应如下所示:" ABCD123123"

2 个答案:

答案 0 :(得分:3)

  

如何删除开头的每个数字?

Linq SkipWhile将是一种方式

string result = string.Concat("1234ABC123".SkipWhile(char.IsDigit)); // "ABC123"

答案 1 :(得分:1)

使用Linq学习一个衬垫很棒,但也许你应该首先掌握基础知识。如果你问的是如何执行这个相当简单的任务,那么因为你只是在学习。不要跳得比你应该的更远,婴儿步骤是最安全的学习方式。

string有一个方便的名为TrimStart的小方法,用于修剪空格或任何自定义字符(如果已指定)。

所以一个选项是:

var digits = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
value = value.TrimStart(digits);

UPDATE 正如fubo's commentary所指出的,这种方法的一个非常干净的替代方案是:

value = value.TrimStart("0123456789".ToCharArray());

END UPDATE

但这看起来有点麻烦,所以你可以考虑实现自己的自定义方法(任务都不够小,不值得自己的方法):

public string TrimStartIfDigit(string s)
{
    int index;

    for (index = 0; index < s.Length; index++)
    {
        if (!char.IsDigit(s[0]))
            break;
    }

    return index == 0 ? s : s.Substring(index); 
}

你可以称之为value = TrimStartIfDigit(value);。这看起来好多了,但我们仍然可以做得更好。欢迎来到extension methods和c#的精彩世界syntactic sugar

public string TrimStartIfDigit(this string s)
{
    int index;

    for (index = 0; index < s.Length; index++)
    {
        if (!char.IsDigit(s[0]))
            break;
    }

    return index == 0 ? s : s.Substring(index); 
}

现在,呼叫网站的效果更好:value = value.TrimStartIfDigit();

很好,但是,嘿,这似乎是一个方便的小方法,我们可以将其推广到任何值得修剪的字符,也许我们可以改进TrimStart的原始语法和非常多的字符数组。欢迎来到lambdas的土地!

public static string TrimStart(this string s, Predicate<char> trimIf)
{
    int index;

    for (index = 0; index < s.Length; index++)
    {
        if (!trimIf(s[index]))
            break;
    }

    return index == 0 ? s : s.Substring(index);
}

呼叫网站看起来并不太糟糕:value = value.TrimStartIfDigit(c => char.IsDigit(c));

一旦掌握了所有这些细微差别并且了解了最新情况以及它的工作方式或多或少,请开始使用Linq。