正在分析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();
}
这里有另一种使用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.IsLetter
或Char.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();
无论哪种方式,建议的格式都是荒谬的,因为字符是隐式可分离的。但是,如果您希望将字符串分隔为下一个赋值,那么您确实需要一个分隔符。注意,空格不建议作为分隔符,因为它没有明确的意义,阅读它会引起眼睛疼痛。