有没有办法删除刚使用Console.WriteLine编写的字符?

时间:2011-03-04 15:26:51

标签: c# console console-application console.writeline

有没有办法从控制台删除最后一个字符,即

Console.WriteLine("List: apple,pear,");
// Somehow delete the last ',' character from the console.
Console.WriteLine(".");
// Now the console contains "List: apple,pear."

当然,我可以先创建一个字符串,然后将其打印到控制台,但我只是好奇,看看我是否可以直接从控制台删除字符。

8 个答案:

答案 0 :(得分:58)

“\ b”是ASCII退格键。打印它以备份一个字符。

    Console.Write("Abc");
    Console.Write("\b");
    Console.Write("Def");

输出“AbDef”;

正如Contango和Sammi所指出的那样,有时需要用空格覆盖:

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

答案 1 :(得分:41)

Console.Write("\b \b");可能就是你想要的。它会删除最后一个字符并将插入符号移回。

\b退格符转义字符只会将插入符号移回。它不会删除最后一个字符。所以Console.Write("\b");只会将插入符号向后移动,使最后一个字符仍然可见。

然而,

Console.Write("\b \b");首先移动插入符号,然后写入一个空白字符,覆盖最后一个字符并再次向前移动插入符号。所以我们写了第二个\b来重新移动插入符号。现在我们已经完成了退格键通常所做的事情。

答案 2 :(得分:16)

如果您使用Write代替WriteLine,则可以使用此功能。

Console.Write("List: apple,pear,");
Console.Write("\b");  // backspace character
Console.WriteLine(".");

但实际上你对控制台有很多控制权。您可以写信到任何您想要的位置。只需使用Console.SetCursorPosition(int, int)方法。

答案 3 :(得分:4)

如果您只想删除一个可以使用的字符:

Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);Console.Write()

如果要删除多个char(如自动化),可以将当前Console.CursorLeft存储在变量中,并在循环中的Console.SetCursorPosition(--variablename, Console.CursorTop)中使用该值删除所需的多个字符!

答案 4 :(得分:3)

除非您通过for或foreach循环迭代,否则上述解决方案效果很好。在这种情况下,您必须使用不同的方法,例如

 Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
 Console.WriteLine(" ");

但它确实适用于字符串连接。

示例:

List<int> myList = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (int i = 0; i < myList.Count; i++)
{
    Console.Write(myList[i] + ", ");
}

Console.WriteLine("\b\b"); //this will not work.

foreach (int item in myList)
{
    Console.Write(item + ", ");
}

//this will work:
Console.SetCursorPosition(Console.CursorLeft - 2, Console.CursorTop);
Console.WriteLine("  ");

//you can also do this, btw
Console.WriteLine(string.Join(", ", myList) + "\b\b");

答案 5 :(得分:2)

要在控制台上正确删除字符,请使用

Console.Write('\x1B[1D'); // Move the cursor one unit to the left
Console.Write('\x1B[1P'); // Delete the character

这将正确删除光标前的字符,并将所有后续字符移回。 使用

Console.Write('\b \b');

您只会将光标前的字符替换为空白,而不会真正地删除

答案 6 :(得分:1)

您可以清除控制台,然后编写新输出。

答案 7 :(得分:0)

如果您想继续写同一行,
覆盖旧行内容,而不创建新行,
您也可以简单地写:

Console.Write("\r"); //CR char, moves cursor back to 1st pos in current line
Console.Write("{0} Seconds...)", secondsLeft);

因此,如果您想从10倒数到0,请继续执行以下操作:

for (var i = 10; i > 0; i--)
{
    Console.Write("\r");
    Console.Write("{0} seconds left...{1}", i, i == 1 ? "\n" : "");
    Thread.Sleep(1000);
}