格式化控制台C#中的RTL文本和列

时间:2017-09-18 09:18:41

标签: c# right-to-left string.format console.writeline

我正在使用' string.Format'操纵文本和创建列

    string.Format("{0, -4}{1, -16}{2, 11}\n", "#", "Name", "Price")

并导致英文和LTR格式正确无误:

    ‎#   Name                  Price
    --- -------            --------
    1   Product1             234440
    2   Product2              34455

当我更改语言并使用阿拉伯字符时,列对齐显示不正确:

    ‎#     نام               قیمت
    --- -------            --------
    1   محصول ۲            ۳۴۲۳۴
    2   محصول ۳            ۴۵۳۴۵۳

我也使用\ u200E和\ u200F,但结果没有变化。

我想要的列显示是:

    نام                  قیمت   #
    -----              ------- ---
    محصول۱              ۱۲۲۲۳   #
    محصول۲               ۲۲۳۳   #

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

请使用以下代码示例。基于baseStr2的第二个系列可以按您的需要工作。

static void Main(string[] args)
{
    var baseStr = "{0, -4}{1, -16}{2, 11}\n";

    Console.WriteLine(string.Format(baseStr, "#", "Name", "Price"));
    Console.WriteLine(string.Format(baseStr, "#", "Product1", "1232132"));
    Console.WriteLine(string.Format(baseStr, "#", "P 2", "88"));
    Console.WriteLine("------------------------");

    Console.WriteLine(string.Format(baseStr, "#", "نام", "قیمت"));
    Console.WriteLine(string.Format(baseStr, "#", "فرش", "1232132"));
    Console.WriteLine(string.Format(baseStr, "#", "یخچال فریزر", "88"));

    Console.WriteLine("------------------------");

    var baseStr2 = "{2, -11}{1, 16}{0, 14}\n";

    Console.WriteLine(string.Format(baseStr2, "#", "Name", "Price"));
    Console.WriteLine(string.Format(baseStr2, "#", "Product1", "1232132"));
    Console.WriteLine(string.Format(baseStr2, "#", "P 2", "88"));
    Console.WriteLine("------------------------");

    Console.WriteLine(string.Format(baseStr2, "#", "نام", "قیمت"));
    Console.WriteLine(string.Format(baseStr2, "۳۴۲۳۴", "فرش", "1232132"));
    Console.WriteLine(string.Format(baseStr2, "۴۵۳۴۵۳", "یخچال فریزر", "88"));

    Console.WriteLine("------------------------");

    Console.ReadLine();
}