为每个字符串设置特定长度

时间:2018-04-20 17:50:12

标签: c#

我不知道是否有这样做的功能: 我需要为我的字符串保留20个字符的特定长度。如果我的字符串是5个字符,那么要保留15个空字节,使其成为前面的空格。 实施例

string test=12345;
string finalstring =test;

输出

finalstring=               12345;

string test=13 characters;
string finalstring =       13 characters;

我无法更好地指明它。

2 个答案:

答案 0 :(得分:4)

您无法在C#中指定字符串的长度。在C#中,字符串是不可变的,这意味着它们一旦初始化就不能改变,虽然它们是引用类型,但它们的工作方式与值类型在某种意义上它们通过格式化等来增长和缩小。换句话说,每个字符串实例C#中的长度和最终长度是不会改变的。对字符串的引用可以更改,这可以是其他字符串的格式。以此为例:

var Name = string.empty;

此处Name是一个0个字符的不可变字符串,为空。

Name = Name + "Michael";

这里Name将不可变的空字符串与不可变的" Michael" string并将Name引用重新分配给" Michael"的新值不可变字符串值。所以是的,在这个例子中,现在有3个字符串添加到堆中。这就是为什么在C#中格式化字符串可能非常耗费资源。

然而;有一个StringBuilder类可以为你处理这项工作。它允许您传入字符串和/或字符并在内部构建一个字符数组,然后可以在最后将其转换为字符串。

var nameBuilder = new StringBuilder();
nameBuilder.Append("Michael");

到目前为止,只有一个不可变的字符串"迈克尔"已使用并添加到nameBuilder。这反过来可以传递和操纵,而无需将多个字符串推送和弹出到堆中。这一切都很多,但是你可以回答。

为了指定你需要的字符串的长度,可以使用字符数组或借用已采用的StringBuilder。使用StringBuilder,您可以指定字符串的大小和最大大小,以更像字符串的方式使用它,并从更好地利用资源中受益。

var initialCapacity = 20;
var maxCapacity = 20;
var nameBuilder = new StringBuilder(initialCapacity, maxCapacity);

当您使用StringBuilder完成后,您可以通过调用随其提供的重写ToString()方法来获取生成的字符串。

希望这有助于您更多地了解它的工作原理以及为什么不能为字符串设置大小。某些语言(如C ++)具有允许您设置最大容量的字符串对象,但它们只是具有内置功能的字符数组。不可变字符串对性能更好,但不以合理的方式格式化它们会使它们变得更糟;如果你知道自己在做什么,那么这是一场双赢/胜利,如果你不知道,那就是输/输。

答案 1 :(得分:2)

使用string.PadLeft方法。按照msdn

上的说明操作
string test="12345";
string finalstring = test.PadLeft(20, ' ');