【问题标题】:String.Trim() doesn't remove whitespacesString.Trim() 不会删除空格
【发布时间】:2013-11-13 21:55:27
【问题描述】:

我有一个小程序可以从文件加载或保存字节数组。在这个字节数组中包含一个字符串,例如:

byte[] header = new byte[64]; //the actual array is larger, but this is for explaining purposes only...
string savedString = Encoding.ASCII.GetString( header, 0, 64 );

因为我用来写入文件的字符串只有 5 个字符长,所以“savedString”加载为“string”等。 不过在这种情况下,我也没什么好担心的,我只是补充了

.Trim();

Encoding.ASCII.GetString( header, 0, 64 );

然而这仍然没有在加载时将字符串削减到正确的大小,所以我猜填充不是由空格组成的?

谢谢。

【问题讨论】:

  • 您是否将Trim() 结果分配回savedString
  • 它是实际上文本开头吗?除了文本数据之外,这个文件中还有什么?
  • 查看字节数组,看看那个位置是什么字节。
  • 我猜你的字符串是用空字符填充的,而不是空格。看到这个问题:stackoverflow.com/questions/6683168/…
  • 显示您的代码,而不是 sn-p 的 sn-ps。您如何使用Trim()

标签: c# arrays byte trim


【解决方案1】:

字节数组最初用零填充,表示的字符是控制字符,而不是空白字符。尝试像这样专门修剪这些零字符:

savedString.Trim('\0');

例如:

byte[] header = new byte[64];
header[0] = (byte)'A';
string savedString = Encoding.ASCII.GetString(header, 0, 64);

var output1 = savedString.Trim();
Console.WriteLine("{0} ({1})", output1, output1.Length); // A□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ (64)
var output2 = savedString.Trim('\0');
Console.WriteLine("{0} ({1})", output2, output2.Length); // A (1)

【讨论】: