【问题标题】:Find the first character in a string that is a letter查找字符串中作为字母的第一个字符
【发布时间】:2014-06-04 04:21:21
【问题描述】:

我试图弄清楚如何查看字符串,找到第一个字母字符,然后从该索引点删除,然后继续。

例如,

string test = "5604495Alpha";

我需要遍历这个字符串,找到"A" 并从该点删除。

【问题讨论】:

    标签: c# string char


    【解决方案1】:

    有几种方法可以做到这一点。两个例子:

    string s = "12345Alpha";
    s = new string(s.TakeWhile(Char.IsDigit).ToArray());
    

    或者,更准确地说,正如 Baldrick 在他的评论中指出的那样,找到第一个字母:

    s = new string(s.TakeWhile(c => !Char.IsLetter(c)).ToArray());
    

    或者,你可以写一个循环:

    int pos = 0;
    while (!Char.IsLetter(s[pos]))
    {
        ++pos;
    }
    s = s.Substring(0, pos);
    

    【讨论】:

    • TakeWhile.. 我喜欢它。我试图想出一种 LINQ 方法来做到这一点,但什么都没想到(今天 F# 太多了:/)。 +1
    • 很好@Baldrick。需求的轻微变化和整个功能的转变。
    • 替换我已删除的评论!:我建议:s = new string(s.TakeWhile(c => !Char.IsLetter(c)).ToArray()); 它应该是第一个字母,而不是第一个非数字。跨度>
    • 很好,@Baldrick。已更新。
    • @CodeGeek:使用IsDigitIsNumber(这两者之间存在差异——查一下)会给你第一个非数字。如果字符串包含空格或特殊字符(即123^$87Alpha),则使用IsNumberIsDigit 将只返回字符串123。 OP 最多需要第一个字母:123^$87
    【解决方案2】:

    一个小方法:

    int getIndexOfFirstLetter(string input) {
        var index = 0;
        foreach (var c in input)
            if (char.IsLetter(c))
                return index;
            else
                index++;
    
        return input.Length;
    }
    

    用法:

    var test = "5604495Alpha";
    
    var result = test.Substring(0, getIndexOfFirstLetter(test));
    
    // Returns 5604495
    

    【讨论】:

    • 'test = test.Split('A')[0];'这就是为什么要写一个方法?
    • 这会使Splits 功能短路。它也不依赖于字符A 作为拆分所需的东西。它将删除 任何 字符。
    • 好的,您能否详细解释一下使用您在广义上提到的代码的好处。谢谢
    • 这行得通,我试图进一步扩展我的问题,但这正是我需要的
    【解决方案3】:

    你应该打破它以确保有一个 匹配,并确保在索引 0 处有一个 ...但它确实适用于此用于演示目的的示例案例。

    string test = "5604495Alpha";
    var test2 = test.Remove(test.IndexOf(
        System.Text.RegularExpressions.Regex.Match(test, "[A-Za-z]").Index));
    // test2 = "5604495"
    

    【讨论】:

    • 如果您要使用正则表达式,请执行Match m = Regex.Match(test, "[A-Za-z]").Index。虽然你必须在这里小心。如果没有字母字符,Index 属性可能不会包含您想要的值。
    • 你可以完全摆脱IndexOfvar test2 = Regex.Match(test, "[A-Za-z]").Index);
    猜你喜欢
    • 2018-09-18
    • 2018-01-19
    • 2017-11-12
    • 2020-02-14
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多