首页 > 解决方案 > 如何在 C# 中动态删除字符串中的最后一个字符

问题描述

我正在创建一个控制台应用程序,用户可以在该应用程序上输入火车站并找到火车站。为此,我Console.ReadKey().Key每次都将 附加到一个字符串中。

当用户键入不正确的字母时,我希望ConsoleKey.Backspace删除字符串中的最后一个字符。

    private void SetDepartingFrom()
    {
        String searchQuery = "";
        ConsoleKey keyIn;

        while ((keyIn = readKey(searchQuery)) != ConsoleKey.Enter)
        {
            if (keyIn == ConsoleKey.Backspace)
            {
                searchQuery.TrimEnd(searchQuery[searchQuery.Length - 1]);
            }
            else
            {
                searchQuery += keyIn.ToString();
            }
        }
    }

    private ConsoleKey readKey(String searchQuery)
    {
        Console.Clear();

        Console.WriteLine("Stations Found:");

        if (searchQuery != "")
            App.Stations.FindAll(x => x.GetName().ToUpper().Contains(searchQuery.ToUpper())).ForEach(x => Console.WriteLine(x.GetName()));
        else
            Console.WriteLine("No Stations found...");

        Console.Write("Search: " + searchQuery);

        return Console.ReadKey().Key;
    }

我尝试了以下方法:

if (keyIn == ConsoleKey.Backspace)
    searchQuery.TrimEnd(searchQuery[searchQuery.Length - 1]);

if (keyIn == ConsoleKey.Backspace)
    searchQuery.Remove(searchQuery.Length -1);

if (keyIn == ConsoleKey.Backspace)
    searchQuery[searchQuery.Length -1] = "";

没有一个工作。我知道字符串在 C# 中是不可变的,但是,这是可能的还是有更好的方法来实现这一点?

提前致谢。

标签: c#stringconsoleimmutability

解决方案


String 是不可变的,因此您必须使用 TrimEnd 返回的值。

searchQuery = searchQuery.TrimEnd(searchQuery[searchQuery.Length - 1]);

在这种情况下,我认为Substring方法会更合适。


推荐阅读