在C#中解析某个字符串

时间:2015-11-10 23:09:45

标签: c# string parsing

我们说我有这样一个字符串:var test = GetThemOut("[a b c d e f]"); // ... public static char[] GetThemOut(string array) { return array .Trim('[', ']') .Split(' ') .Select(x => x[0]) .ToArray(); } 。我想提取这些字符并创建一个char数组。我就是这样做的。似乎工作:

public static char[] GetThemOut(string array)
{
    return array
        .Trim('[', ']')
        .Replace(" ", "")
        .ToCharArray();
}

有没有更简单,更清洁的方法来实现这一目标?好吧,对我来说,我的解决方案真的很愚蠢,语言可以提供更好的解决方案。

仍在学习语言,试图掌握技巧。感谢。

修改

替代方案,如建议:

enableLocking: true

4 个答案:

答案 0 :(得分:2)

这是另一种使用Char.IsWhiteSpace的风格:

var test = GetThemOut("[a b c d e f]");

public static char[] GetThemOut(string array)
{
    return array.Trim('[', ']')
                .Where(c => !Char.IsWhiteSpace(c))
                .ToArray();                          
}

答案 1 :(得分:1)

像这样:

    public static char[] GetThemOut(string array)
    {
        return array.Trim('[', ']').Replace(" ", string.Empty).ToCharArray();
    }

答案 2 :(得分:1)

您只需使用Char.IsLetterChar.IsLetterOrDigit

进行归档即可
public static char[] GetThemOut(string array)
{
    return array.Where(c => Char.IsLetter(c)).ToArray();
}

答案 3 :(得分:0)

从传统角度理解解析;考虑这个例子:

    static char[] ParseCharSequence(string s)
    {
        s = s.Trim();

        if (s.Length > 1 && s[0] == '[' && s[s.Length - 1] == ']')
        {
            char[] array = new char[s.Length / 2];

            int depositor = 0;
            int offset = -1;
            int boundary = s.Length - 1;

            for (int i = 1; i < boundary; i++)
            {
                if (s[i] != ' ')
                {
                    if (i == offset + 1)
                    {
                        throw new ArgumentException(String.Format("Conflict at index {0}.", i));
                    }

                    array[depositor++] = s[i];
                    offset = i;
                }
            }

            Array.Resize(ref array, depositor);

            return array;
        }

        return null;
    }

此功能比以下快10倍:

return s.TrimStart('[').TrimEnd(']').Where(x => !Char.IsWhiteSpace(x)).ToArray();

无论哪种方式,建议的格式都是荒谬的,因为字符是隐式可分的。但是,如果您希望将字符串分隔为下一个赋值,那么您确实需要一个分隔符。请注意,空间不建议作为分隔符,因为它没有明确的意义,阅读它会引起眼睛疼痛。