多字符串替换

时间:2012-07-15 17:57:40

标签: c#

我试图用这个程序中的ascii文本替换普通文本:

所以a将被替换为&等等。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TextConverter
{
    public partial class TextCoverter : Form
    {
        public TextCoverter()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string[] normal = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
            string[] ascii = { "â", "ß", "ç", "ð", "è", "ƒ", "ģ", "н", "ι", "j", "ќ", "ļ", "м", "и", "ю", "ρ", "Ω", "ѓ", "$", "τ", "ט", "Λ", "ш", "χ", "У", "ź" };


            for (int i = 0;  i < 26; i++)
            {
                textBox2.Text = textBox1.Text.Replace(normal[i], ascii[i]);
            }

        }

    }
}

但它不会取代Ascii。请帮忙。

2 个答案:

答案 0 :(得分:3)

由于您将结果写入与原始变量不同的变量,因此只会替换最后一个字母。您应该写入同一个框,或写入临时字符串,并将其写入最后的第二个框。

var tmp = textBox1.Text;
for (int i = 0;  i < 26; i++)
{
    tmp = tmp.Replace(normal[i], ascii[i]);
}
textBox2.Text = tmp;

一般来说,这不是最有效的替换算法,因为它在不可变的字符串上运行。你最好创建一个可变的字符串构建器,并一次写一个字符。

const string repl = "âßçðèƒģнιjќļмиюρΩѓ$τטΛшχУź";
var res = new StringBuilder();
foreach (char c in textBox1.Text) {
    if (c >= 'a' && c <= 'z') {
        res.Append(repl[c-'a']);
    } else {
        res.Append(c);
    }
}
textBox2.Text = res.ToString();

答案 1 :(得分:0)

textBox2.Text = textBox1.Text.Replace(normal[i], ascii[i]); 你一次又一次地替换textBox1,但不保存以前的状态,只能进行最后一次循环迭代

相关问题