當C++編碼,我可以這樣做:是否有一個C#相當於對C的sprintf(結果, 「%5.5s」,stringValue的)
sprintf(result, "%5.5s", stringValue);
這將確保打印的值總是5字符長,填充或根據需要截斷。
我發現自己使用的String.Format需要相同的功能在C#: -
String.Format("{0,5}", stringValue);
雖然這是罰款較短值,它不會截斷長值。
這是最好的解決方案是什麼?
當C++編碼,我可以這樣做:是否有一個C#相當於對C的sprintf(結果, 「%5.5s」,stringValue的)
sprintf(result, "%5.5s", stringValue);
這將確保打印的值總是5字符長,填充或根據需要截斷。
我發現自己使用的String.Format需要相同的功能在C#: -
String.Format("{0,5}", stringValue);
雖然這是罰款較短值,它不會截斷長值。
這是最好的解決方案是什麼?
沒有任何東西等價,沒有#。
可以接近使用Substring
和Math.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
試試這個,
我覺得stringValue的是你的字符串變量,如果是這樣的話代碼將是
stringValue = (stringValue.Length < 5) ? stringValue : stringValue.Substring(0,4);
@Ilya Ivanov我修改了代碼。現在它不會通過例外 –
下面是一個擴展方法,應該做你想做的。您可以將最大長度和填充字符更改爲您喜歡的字符,但默認值分別爲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-
我覺得這是最好的選擇。 如果我重做它是這樣的: 'String.Format(「{0,5}」,StringValue).Substring(0,5)' 我不需要Math.Min()。 – Paresh138