Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

"\ b" является ASCII Backspace. Напечатайте это, чтобы поддержать один символ.

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

выходы "AbDef";

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

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

Ответ 2

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

Символ escape-пробега \b только перемещает каретку назад. Он не отменяет последний char. Таким образом, Console.Write("\b"); только перемещает каретку назад, оставляя последний символ все еще видимым.

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

Это правильно удалит символ перед курсором и вернет все последующие символы назад. Использование

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

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

Мое предлагаемое решение должно работать и на некоторых других языках программирования, поскольку оно использует escape-последовательности ANSI!

Ответ 7

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