使用indexOf替换出现的字符

本文关键字:字符 换出 indexOf 替换 使用 | 更新日期: 2023-09-27 18:06:48

如何使用indexOf替换多个出现的输入字母?我现在可以找到所有以-1结尾的索引。在转换为char时,我也得到了一个异常。

static Random rnd = new Random();
    static void Main(string[] args)
    {
        string wrong = "";
        ArrayList list = new ArrayList();
        list.Add("Dune");
        list.Add("The Lord of the Rings");
        list.Add("The Iliad");
        list.Add("Hamlet");
        int r = rnd.Next(list.Count);
        Console.WriteLine((string)list[r]);
        string s = (string)list[r];
        string patten = "[a-zA-Z0-9]";
        Regex rgx = new Regex(patten);
        string sDash = rgx.Replace(s, "-");
        do
        {
            string a = " ";
            Console.Write("Guess a letter: ");
            a = Console.ReadLine();
            while (a.Length != 1)
            {
                Console.WriteLine("Please enter only one letter:");
                a = Console.ReadLine();
            }
            char myChar = a[0];
            int input = s.IndexOf(a);
            while (input != -1)
            {
                Console.WriteLine(input);
                input = s.IndexOf(myChar, input + 1);
            }
            if (input != -1)
            {
                StringBuilder builder = new StringBuilder(sDash);
                builder[input] = myChar;
                sDash = builder.ToString();
                Console.WriteLine(sDash + String.Compare(sDash, s, true));
            }
            else {
                StringBuilder builder = new StringBuilder(wrong);
                builder.Append(a);
                string wrongAnswers = builder.ToString();
                Console.WriteLine("Wrong, try again. 'n {0}", wrongAnswers);
            }
        } while (String.Compare(sDash, s) == -1);
    }

使用indexOf替换出现的字符

我是这样做的:

static Random rnd = new Random();
static void Main(string[] args)
{
    string wrong = "";
    List<String> list = new List<String>();
    list.Add("Dune");
    list.Add("The Lord of the Rings");
    list.Add("The Iliad");
    list.Add("Hamlet");
    int r = rnd.Next(list.Count);
    Console.WriteLine((string)list[r]);
    string s = (string)list[r];
    string patten = "[a-zA-Z0-9]";
    Regex rgx = new Regex(patten);
    string sDash = rgx.Replace(s, "-");
    StringBuilder wrongAnswers = new StringBuilder();
    do
    {
        string a = " ";
        Console.Write("Guess a letter: ");
        a = Console.ReadLine();
        while (a.Length != 1)
        {
            Console.WriteLine("Please enter only one letter:");
            a = Console.ReadLine();
        }
        char myChar = a.ToLower()[0];
        int input = s.ToLower().IndexOf(myChar);
        bool foundSomething = false;
        StringBuilder builder = new StringBuilder(sDash);
        while(input != -1)
        {
            foundSomething = true;
            builder[input] = myChar;
            try
            {
                input = s.ToLower().IndexOf(myChar, input + 1);
            }
            catch (ArgumentOutOfRangeException)
            {
                input = -1;
            }
        }
        sDash = builder.ToString();
        if (foundSomething)
        {
            Console.WriteLine(sDash + " " + sDash.ToLower().Equals(s.ToLower()));
        }
        else
        {
            wrongAnswers.Append(myChar);
            Console.WriteLine("Wrong, try again. 'n {0}", wrongAnswers);
        }
    } while (!sDash.ToLower().Equals(s.ToLower()));
}

顺便说一下,这里可以做很多优化,但原则是在这里…