我正在编写一个程序,该程序写入需要特定位置的文件:
它看起来像:
writer.WriteLine("{0,-3}{1,-5}{2,-30}", data1, data2, data3);
它启动的位置是正确的,但是,如果data1超过3个字符,则按超出的数量推送格式,
有没有办法让data1上限为3个字符并使用writeline格式忽略任何多余的字符?
答案 0 :(得分:3)
如果我理解正确,你应该“安全地子串”(Substring
如果你选择一个大于字符串长度的长度则抛出一个异常)你的字符串到所需的长度。
public static string SafeSubstring(this string text, int start, int length)
{
return text.Length <= start ? string.Empty
: text.Length - start <= length ? text.Substring(start)
: text.Substring(start, length);
}
然后,例如:
writer.WriteLine("{0,-3}{1,-5}{2,-30}",
data1.SafeSubstring(0, 3),
data2.SafeSubstring(0, 3),
data3.SafeSubstring(0, 3));
答案 1 :(得分:0)
使用string.Substring
。如果字符串超过3个字符,则此代码将对其进行修剪:
Console.WriteLine("{0,-3}{1,-5}{2,-30}",
data1.Substring(0,data1.Length > 3 ? 3 : data1.Length),
data2, data3);
答案 2 :(得分:0)
您无法单独使用格式化解决此问题,但您可以实施(扩展)方法:
public static string ToLength(this object value, int length) {
if (length == 0)
return "";
else if (null == value)
return new string(' ', Math.Abs(length));
string v = value.ToString();
if (v.Length >= Math.Abs(length))
return v.Substring(0, Math.Abs(length));
else if (length < 0)
return v.PadRight(-length);
else
return v.PadLeft(length);
}
然后使用它
writer.WriteLine("{0}{1}{2}",
data1.ToLength(-3),
data2.ToLength(-5),
data3.ToLength(-30));
我已经为object
实现了扩展方法,而不是string
,因为您可能希望将任何对象放到流中。