首页 > 解决方案 > 在以下情况下删除不需要的尾随逗号的正确和安全方法是什么?

问题描述

假设我们要删除,以下代码中最后一个不需要的。

for (int i = 0; i < 5; i++)
{
    foreach (var a in "Money")
        Console.Write($"{a},");
}

在此处输入图像描述

如果我们只添加Console.Write("\b\n");如下,

for (int i = 0; i < 5; i++)
{
    foreach (var a in "Money")
        Console.Write($"{a},");
    Console.Write("\b\n");
}

输出将仍然相同。不需要的尾随逗号仍然存在。

但是如果我们添加\0如下,

for (int i = 0; i < 5; i++)
{
    foreach (var a in "Money")
        Console.Write($"{a},");
    Console.Write("\b\0\n");
} 

不需要的尾随,消失。

在此处输入图像描述

有人说 using\0只是一个 hack,可能会在未来的更新中破坏。那么,如果我坚持使用\b\n序列,删除尾随逗号的正确和安全方法是什么?

编辑

不仅在终端输出上,\b在下面也不会去掉前面的字符。

using (StreamWriter sw = new StreamWriter("output.txt"))
{
    for (int i = 0; i < 5; i++)
    {
        foreach (var a in "Money")
            sw.Write($"{a},");
        sw.Write("\b\n");
    }
}

标签: c#

解决方案


您可以String.Join在内部循环中使用:

for (int i = 0; i < 5; i++)
{
  var text = String.Join(",", "Money");
  Console.Write(text);
}

关于您的转义序列,取决于\b终端实现。如果可以选择向后移动一个字符并删除该字符,或者它可能只是将光标向后移动一个字符并且对已经存在的内容不做任何事情。

这与写作\0有点落后的原因相同,因为再次由终端决定如何实现nul角色的渲染。

如果您想使用转义序列来清除该值,那么您可以使用\b后移一个字符,在 上写一个空格,,然后再次返回\b,然后写下换行符:

Console.Write("\b \b\n");

推荐阅读