如何在不重复"t"或"n"的情况下将所有值放在一条垂直直线上?



我试图使文本区域中的产品价格成为一条直线。然而,由于产品名称的长度不同,需要不同数量的"\t"才能使价格垂直对齐。

以下是我尝试做的一个示例:

string text = "1X "  + "ABC Brand Drink tttt " + price + "n" + "2X" + 
"BCD Drink that has a longer name tt" + price;

我的问题是,有没有一种方法可以在不使用所有"\t"转义序列的情况下使我的价格垂直对齐?我不知道有多少要使用的"\t"文本将以编程方式生成,所以我不知道如何衡量#。

以下是我正在努力实现的示例输出:https://i.stack.imgur.com/KvUQx.jpg

我正在尝试在HelloSign API模板中使用它来填充自定义文本字段。

更新:到目前为止,我使用了评论中建议的String.PadRight属性,它有点奏效,但价格仍然没有完全一致。以下是当前结果的图片:https://i.stack.imgur.com/Twsvx.jpg.以下是我使用的代码:

ArrayList al = new ArrayList();
string prodName = "Try out product A and product B2";
string price = "$620";
string quantity = "1X";
Product a = new Product(prodName, price, quantity);
al.Add(a);
string prodName2 = "Out product A and product Basdasddddddasd";
string price2 = "$650";
string quantity2 = "123X";
al.Add(new Product(prodName2, price2, quantity2));
string str = "";
string abs = "";
int nam, quan = 0;
int asdsd = 0;
foreach (Product p in al)
{
abs = "";
nam = p.ProdName.Length;
quan = p.ProdQuantity.Length;
abs += p.ProdQuantity + " " + p.ProdName;
//if ((nam + quan) % 2 == 0)
//{
//    asdsd = (175 - (nam + quan));
//}
//else
//{
//    asdsd = (175 - (nam + quan) - 1);
//}
asdsd = (175 - (nam + quan));
str += abs.PadRight(asdsd) + p.ProdPrice + "nn";

请忽略变量的名称,我会在一切完成后更改它们。

您不需要制表符,只需要知道每列中最长的文本,然后根据需要的对齐方式向左或向右填充即可。伪代码如下:

foreach value in each column
find longest length
foreach value in each column
add to text: current value padded left longest length - actual length // right alingment
or
add to text: current value padded right longest length - actual length // left alingment
+ whatever addtional spacing you want in between columns.

你完了。当然,如果你事先知道每列的最大预期长度,那么你可以跳过整个第一步。

您正在寻找的方法有:

  • string.PadLeft(Int32)
  • string.PadRight(Int32)

最新更新