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

Con*_*ngo 40 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."
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*len 59

"\ b"是ASCII退格.打印它以备份一个字符.

    Console.Write("Abc");
    Console.Write("\b");
    Console.Write("Def");
Run Code Online (Sandbox Code Playgroud)

输出"AbDef";

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

    Console.Write("\b \b");
Run Code Online (Sandbox Code Playgroud)

  • 刚刚意识到如果你在\ b之后直接做换行,它就不起作用 - 你必须添加一个空格来"覆盖"流氓角色.\ b控制光标,它更像是左边的箭头键而不是退格键. (3认同)
  • 谢谢,这很完美。我很欣赏你的回答 - 这是很难找到答案的问题之一,因为很难找到明确的搜索词。 (2认同)
  • 实际上 '\b' 只在当前行有效。您无法覆盖上一行中的字符。 (2认同)

Sam*_*mmi 41

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

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

Console.Write("\b \b");但是,首先将插入符号移回,然后写入一个空白字符,覆盖最后一个字符并再次向前移动插入符号.所以我们写了一秒钟\b再次将插入符号移回去.现在我们已经完成了退格按钮通常所做的事情.


Jef*_*dge 17

如果您使用Write而不是,这将成功WriteLine.

Console.Write("List: apple,pear,");
Console.Write("\b");  // backspace character
Console.WriteLine(".");
Run Code Online (Sandbox Code Playgroud)

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


nul*_*lmn 8

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

Console.Write("\x1B[1D"); // Move the cursor one unit to the left
Console.Write("\x1B[1P"); // Delete the character
Run Code Online (Sandbox Code Playgroud)

这将正确删除光标之前的字符并将所有后续字符移回。使用下面的语句只会将光标之前的字符替换为空格,而不会实际删除它。

Console.Write("\b \b");
Run Code Online (Sandbox Code Playgroud)

我提出的解决方案也应该适用于其他一些编程语言,因为它使用 ANSI 转义序列。


小智 6

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

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

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