Есть ли способ удалить символ, который только что был написан с помощью консоли.Метода WriteLine?

есть ли способ, чтобы удалить последний символ из консоли, т. е.

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

конечно, я мог бы сначала создать строку, а затем распечатать ее на консоли, но мне просто интересно узнать, могу ли я удалить символы непосредственно из консоли.

6 ответов


"\b " - это обратное пространство ASCII. Распечатайте его для резервного копирования одного символа.

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

выходы "AbDef";

как указали Contango и Sammi, бывают случаи, когда требуется перезапись пробелом: консоль.Написать ("\b \b");


Console.Write("\b \b"); вероятно, это то, что вы хотите. Он удаляет последний символ и перемещает курсор назад.

на \b Backspace escape-символ только перемещает курсор назад. Это не'remove последнего символа. Так что Console.Write("\b"); только перемещает курсор назад, оставляя последний символ все еще видимым.

Console.Write("\b \b"); однако сначала перемещает курсор назад, затем пишет символ пробела, который перезаписывает последний символ и снова перемещает курсор вперед. Поэтому мы пишем второй \b to переместите каретку обратно. Теперь мы сделали то, что обычно делает кнопка backspace.


это сделает трюк, если вы используете Write вместо WriteLine.

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

но у вас на самом деле есть много контроля над консолью. Вы можете писать в любое место, куда пожелаете. Просто используйте Console.SetCursorPosition(int, int) метод.


если вы хотите удалить только один символ можно использовать:

Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop); и Console.Write() еще раз.

если вы хотите удалить более одного символа, как автоматизация, вы можете сохранить текущий Console.CursorLeft в переменной и используйте это значение в Console.SetCursorPosition(--variablename, Console.CursorTop) в цикле, чтобы удалить символы, которые вы хотите!


вышеуказанные решения отлично работают, если вы не повторяете цикл 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");

вы можете очистить консоль,а затем написать новый вывод.