【问题标题】:How do you pad a string with a given character or make it empty if length to pad is 0 in C#?如果 C# 中填充的长度为 0,如何用给定字符填充字符串或使其为空?
【发布时间】:2015-11-04 07:13:55
【问题描述】:

除了如果长度为 0 使字符串为空之外,是否有一个函数几乎与 String.PadLeft(int length) 所做的完全一样? 这就是我想做的:

string someText = "abc".PadLeft(8, '0');
Console.WriteLine(someText);

string otherText = "xyz".PadLeft(0, '0');
Console.WriteLine(otherText);

Console.WriteLine("Done!");

我希望输出是这样的:

00000abc

Done!

然而,实际的输出是这样的:

00000abc
xyz
Done!

【问题讨论】:

  • 你期望 "xyz".PadLeft(2, '0'); 的结果是什么?
  • 写一个扩展方法,如果为0,返回空,否则返回PadLeft
  • 你可能不得不写一个扩展。
  • padleft 中的第一个参数是列宽,如果将列宽指定为 0,则不会填充任何内容,因为仅当字符串长度小于列宽时才会发生填充。因此,您会得到“xyz”作为输出。如果你想返回空字符串,你应该检查列宽是否为 0,那么它应该返回空。

标签: c# padding


【解决方案1】:

没有这样的方法。但是,您可以编写自己的 Extension Method 来满足您的需求。

此方法的行为与经典的 PadLeft 完全相同,只是如果提供的长度为 0,它会返回一个空字符串。

如果您希望在填充小于字符串长度的情况下返回一个空字符串,您可以轻松地将条件从padLength == 0 更改为padLength < input.Length

public static class Extensions
{
    public static string CustomPadLeft(this string input, int padLength, char padChar)
    {
        if (padLength == 0)
        {
            return string.Empty;
        }
        return input.PadLeft(padLength, padChar);
    }
}

这是验证行为的相应单元测试:

[TestMethod]
public void PadTest()
{
    Assert.AreEqual(string.Empty, "xyz".CustomPadLeft(0, '0'));
    Assert.AreEqual("xyz", "xyz".CustomPadLeft(2, '0'));
    Assert.AreEqual("00000abc", "abc".CustomPadLeft(8, '0'));
}

我也建议你找一个比我的CustomPadLeft更好的名字...

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2016-02-25
    • 2012-08-06
    • 2017-08-23
    • 2012-11-08
    • 2021-07-06
    相关资源
    最近更新 更多