有一个字符数组,例如
char [] biggerText = new char [8];
然后我同样输入一些值:
biggerText[0] = (char) 12;
biggerText[1] = (char) 48;
然后我使用以下操作:
string smallerText= string.Join("", biggerText);
当您执行
smallerText.Length
时,您会得到 8 而不是 2。
在转换为字符串时修剪此数组以省略空值的最有效方法是什么?
为什么不使用
List<char>
?这样,您不必担心索引,也不必在一开始就知道最终长度(正如 @n8wrl 的评论中指出的)。
var list = new List<char>();
list.Add((char)12);
list.Add((char)48);
然后就可以用更优雅的方式得到最终的
string
:
var smallerText = new string(list.ToArray());
这个
string
将有正确的Length
。
您可以从数组中创建一个新字符串,并从末尾删除空字符:
string smallerText = new String(biggerText).TrimEnd('\0');
这应该可以解决问题。
string smallerText = string.Join("", biggerText.Where(n => n != '\0'));
这是一个很好的方法,因为
Trim
仅适用于空格,但可能不适合您。
您可以使用
TakeWhile
仅获取字符,直到您看到“空”字符,假设您不想要第一个“空”字符之后可能存在的任何字符。
string smallerText= string.Join("", biggerText.TakeWhile(c => c != '\0'));
char [] biggerText = new char [8];
biggerText[0] = (char)12;
biggerText[1] = (char)48;
string smallerText= new string(biggerText).Replace("\0", string.Empty);
int length = smallerText.Length;
可以在任何位置,因此只需将其替换为空值即可。
如果您指的是最有效的:
string smallerText = new string(biggerText, 0, 2);
但是“最有效的修剪方法”就是
.Trim
方法😊
string smallerText = new string(biggerText).TrimEnd(char.MinValue);
这是我的跨度解决方案!
ReadOnlySpan<char> chars = biggerText;
string smallerText = chars.TrimEnd(char.MinValue).ToString();
在我看来,这比其他答案要好得多。它将 char 数组包装为
ReadOnlySpan<char>
并通过计算实际长度来修剪它的末尾。
请注意,它对于数组而不是字符串效果更好。对于字符串,请使用
string.TrimEnd(char);