使用C ++编写代码时,我可以执行以下操作:
sprintf(result, "%5.5s", stringValue);
这将确保打印的值始终为5个字符长,根据需要填充或截断。
我发现自己在C#中使用String.Format需要相同的功能: -
String.Format("{0,5}", stringValue);
虽然这适用于较短的值,但它不会截断较长的值。
最佳解决方案是什么?
答案 0 :(得分:1)
试试这个,
我认为 stringValue 是你的字符串变量,如果是,那么代码就是
stringValue = (stringValue.Length < 5) ? stringValue : stringValue.Substring(0,4);
答案 1 :(得分:0)
没有直接等同的东西,而不是#。
您可以使用Substring
和Math.Min
:
String.Format("{0,5}", stringValue.Substring(0, Math.Min(stringValue.Length, 5)));
答案 2 :(得分:0)
没有内置格式来满足您的需求。尝试定义自定义扩展方法并使用它
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
答案 3 :(得分:0)
这是一个应该做你想要的扩展方法。您可以将最大长度和填充字符更改为您喜欢的内容,但默认值分别为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-