如何防止特殊符号之间的文本更改

How to prevent text changing between special symbols

我用来根据需要更改文本的代码。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    string A = textBox1.Text.Trim();

    A = A.Replace("A", "C");
    A = A.Replace("F", "H");
    A = A.Replace("C", "W");
    A = A.Replace("B", "G");

    textBox2.Text = (A);
}

现在我需要停止更改文本, 如果我输入“|” tetxbox1 中的符号,我再次需要 如果我输入“|”,开始更改文本又是符号,比如这张图里发生的事情。

那么我怎样才能防止文本仅在这两个符号之间更改 ||

你替换的代码不会像你现有的那样工作,因为它只会不断改变同一个字符串的字符(你把 A 改成 C,然后再把 C 改成 W,所以你的最终第一个字符是 W 而不是你想要的 C)。

下面是一个过于复杂的方法(我还添加了一个遍历字符串的每个字符进行替换的方法)但它应该有效,您可以根据需要进行更改。祝你好运

private void textBox1_TextChanged(object sender, EventArgs e)
{
       string A = textBox1.Text.Trim();

        string[] Aarry = A.Split('|');
        string cleanedString = "";


        for (int i = 0; i < Aarry.Length; i++)
        {
            if (i % 2 == 0)
                cleanedString += FixText(Aarry[i]) + " ";
            else
                cleanedString += Aarry[i] + " ";
        }

        textBox2.Text = cleanedString ;

下面的方法将通过每个字符进行替换

public string FixText(string A)
    {

        string newText = "";

        for (int i = 0; i < A.Length; i++)
        {
            switch (A.Substring(i, 1))
            {

                case "A":
                    newText += A.Substring(i, 1).Replace("A", "C");
                    break;
                case "F":
                    newText += A.Substring(i, 1).Replace("F", "H");
                    break;
                case "C":
                    newText += A.Substring(i, 1).Replace("C", "W");
                    break;
                case "B":
                    newText += A.Substring(i, 1).Replace("B", "G");
                    break;
                default:
                    break;
            }
        }

        return newText;
    }

要处理超过 500 行的替换类型,您可以使用以下方法设置字典:

public Dictionary<string, string> ReturnReplacementDictionary()
    {
        Dictionary<string, string> dictLibrary = new Dictionary<string,string)()
        {
            {"A","C"},
            {"F","H"},
            {"C","W"},
            {"B","G"}

        };
        return dictLibrary;
    }

在上面,您只需继续添加所有其他替换值即可。

然后你会调用下面的方法而不是 switch case(如果你不添加 character/replacement 到字典方法你可以看到它只会将替换字符设置为空白):

public string FixTextUsingDictionary(string A)
    {
        Dictionary<string, string> replaceDict = ReturnReplacementDictionary();
        string newText = "";

        for (int i = 0; i < A.Length; i++)
        {
            string replacementLetter="";
            if (replaceDict.TryGetValue(A.Substring(i, 1), out replacementLetter)) 
            {
                newText += replacementLetter;
            }
            // Added so that if the char is not in the dictionary the output       will just have the original char
            else { newText += A.Substring(i, 1); }

        }
        return newText;

    }

祝你好运

如果文本是手动输入的而不是从剪贴板粘贴的,我的解决方案是:

int counter = 0;
    private string replaceSpecial(string A)
    {
        if (A.Equals("A")) return "C";
        else if (A.Equals("F")) return "H";
        else if (A.Equals("C")) return "W";
        else if (A.Equals("B")) return "G";
        else if (A.Equals("|")) return "";
        else return A;
    }

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar.Equals('|'))
        {
            counter++;
        }
        if (counter == 0 || counter % 2 == 0)
            textBox2.Text += replaceSpecial(e.KeyChar.ToString());
        else
            textBox2.Text += e.KeyChar.ToString().Replace("|", "");
    }

考虑到唯一输入的字符是“|”。 祝你好运

void StringReplace(string initialString)
        {
            bool insideSpecialCharacter = false;
            string[] Pattern = { "A-C", "C-W", "F-H", "B-G" };
            string specialCharacter = "|";
            char[] characters = initialString.ToCharArray();

            char?[] Newcharacters = new char?[characters.Length];
            for (int i = 0; i < characters.Length; i++)
            {
                if (!characters[i].ToString().Equals(specialCharacter))
                {
                    if (insideSpecialCharacter)
                    {
                        Newcharacters[i] = characters[i];
                    }
                    else
                    {
                        CheckPattern(Pattern, characters, Newcharacters, i);
                    }
                }
                else
                {
                    insideSpecialCharacter = (insideSpecialCharacter) ? false : true;
                }
            }
            txtSecond.Text = string.Concat(Newcharacters).Trim();
        }

        //-------Checks the Pattern Array and Replaces the Characters-----------

private static void CheckPattern(string[] Pattern, char[] characters, char?[] Newcharacters, int i)
        {
            for (int j = 0; j < Pattern.Length; j++)
            {
                string[] replaceValue = Pattern[j].Split('-');
                if (characters[i].ToString() == replaceValue[0])
                {
                    Newcharacters[i] = Convert.ToChar(characters[i].ToString().Replace(characters[i].ToString(), replaceValue[1]));
                    break;
                }
                else
                {
                    Newcharacters[i] = characters[i];
                }
            }
        }