从 char[] 转换后从字符串中修剪 /null 值(在 C# 中)

问题描述 投票:0回答:7

有一个字符数组,例如

char [] biggerText = new char [8];

然后我同样输入一些值:

biggerText[0] = (char) 12;
biggerText[1] = (char) 48;

然后我使用以下操作:

string smallerText= string.Join("", biggerText);

当您执行

smallerText.Length
时,您会得到 8 而不是 2

在转换为字符串时修剪此数组以省略空值的最有效方法是什么?

c# arrays string casting char
7个回答
3
投票

为什么不使用

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


2
投票

您可以从数组中创建一个新字符串,并从末尾删除空字符:

string smallerText = new String(biggerText).TrimEnd('\0');

1
投票

这应该可以解决问题。

string smallerText = string.Join("", biggerText.Where(n => n != '\0'));

这是一个很好的方法,因为

Trim
仅适用于空格,但可能不适合您。


1
投票

您可以使用

TakeWhile
仅获取字符,直到您看到“空”字符,假设您不想要第一个“空”字符之后可能存在的任何字符。

string smallerText= string.Join("", biggerText.TakeWhile(c => c != '\0'));

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;

可以在任何位置,因此只需将其替换为空值即可。


0
投票

如果您指的是最有效的:

string smallerText = new string(biggerText, 0, 2);

但是“最有效的修剪方法”就是

.Trim
方法😊

string smallerText = new string(biggerText).TrimEnd(char.MinValue);

0
投票

这是我的跨度解决方案!

ReadOnlySpan<char> chars = biggerText;
string smallerText = chars.TrimEnd(char.MinValue).ToString();

在我看来,这比其他答案要好得多。它将 char 数组包装为

ReadOnlySpan<char>
并通过计算实际长度来修剪它的末尾。

请注意,它对于数组而不是字符串效果更好。对于字符串,请使用

string.TrimEnd(char);

© www.soinside.com 2019 - 2024. All rights reserved.