正在分析C#中的某个字符串

本文关键字:字符串 | 更新日期: 2023-09-27 18:21:29

假设我有这样一个字符串:[a b c d e f]。我想提取这些字符并创建一个char数组。以下是我的操作方式。似乎正在工作:

var test = GetThemOut("[a b c d e f]");
// ...
public static char[] GetThemOut(string array)
{
    return array
        .Trim('[', ']')
        .Split(' ')
        .Select(x => x[0])
        .ToArray();
}

有没有一种更简单、更干净的方法来实现这一点?嗯,对我来说,我的解决方案似乎真的很愚蠢,而且语言可以提供更好的解决方案。

仍在学习语言,努力掌握技巧。谢谢

编辑

备选方案,如建议:

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

正在分析C#中的某个字符串

这里有另一种使用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();                          
}

像这样:

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

您可以简单地使用Char.IsLetterChar.IsLetterOrDigit:进行归档

public static char[] GetThemOut(string array)
{
    return array.Where(c => Char.IsLetter(c)).ToArray();
}

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

    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();

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