Есть ли способ удалить символ, который только что был написан с помощью Console.WriteLine?
Можно ли удалить последний символ из консоли, т.е.
Console.WriteLine("List: apple,pear,");
// Somehow delete the last ',' character from the console.
Console.WriteLine(".");
// Now the console contains "List: apple,pear."
Конечно, я мог бы сначала создать строку, а затем распечатать ее на консоли, но мне просто интересно узнать, могу ли я удалять символы непосредственно с консоли.
Ответы
Ответ 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
Вы можете очистить консоль, а затем записать новый вывод.