c#中是否有与C sprintf(result, "%5.5 ", stringValue)等价的函

本文关键字:quot stringValue sprintf result 是否 | 更新日期: 2023-09-27 18:07:08

在c++中编码时,我可以这样做:

sprintf(result, "%5.5s", stringValue);

这将确保打印的值始终是5个字符长,根据需要填充或截断。

我发现自己需要c#中使用String的相同特性。格式:-

String.Format("{0,5}", stringValue);

虽然这对于较短的值很好,但它不会截断较长的值。

这个问题的最佳解决方案是什么?

c#中是否有与C sprintf(result, "%5.5 ", stringValue)等价的函

试试这个,

我认为stringValue是你的字符串变量,如果是这样,那么代码将是

stringValue = (stringValue.Length < 5) ? stringValue  : stringValue.Substring(0,4);

没有直接等价的,除了#.

您可以使用SubstringMath.Min来接近:

String.Format("{0,5}", stringValue.Substring(0, Math.Min(stringValue.Length, 5)));

没有内置格式来满足您的需要。尝试定义自定义扩展方法并使用它

public static class StringExtensions
{
    public static string TruncateTo(this string str, int maxCharsCount)
    {
        if (str.Length > maxCharsCount)
            return str.Substring(0, maxCharsCount);
        return str;
    }
}

现在你可以

Console.WriteLine("{0,3}", "long long long value".TruncateTo(3));
Console.WriteLine("{0,7}", "short".TruncateTo(7));

将打印:

lon
  short

这是一个扩展方法,它应该做你想做的事情。您可以将最大长度和填充字符更改为您喜欢的字符,但默认值分别为5-

public static string ToCustomSprintF(this string initial, int max_length = 5, char padChar = '-')
{
     int len = initial.Length;
     if (len == max_length)
         return initial;
     else if (len < max_length)
         return initial.PadRight(len + (max_length - len), padChar); 
     return initial.Substring(0, max_length);  
}

你可以像普通的

一样使用它
string str = "1234".ToCustomSprintF();
//output would be 1234-