用新字符串替换字符串的每个字符

时间:2017-03-27 11:15:54

标签: c#

我正在开发的c#程序检查用户输入的第一个字符,如果它以.(点)开头,我想在用户写的时候用安抚的字符串替换用户输入的每个字符,但是我收到了错误

  

索引越界异常

我的代码:

if (textBox1.Text.StartWith(".")) {
    string MyText = "Hello World";
    int x = 0;
    string NewText;
    while (x <= MyText.Length) {
        NewText = textBox1.Text.Replace(textBox1.Text[x], MyText[x]);
        TextBox1.Text = NewText;
        x++;
    }
}

4 个答案:

答案 0 :(得分:3)

你超越了字符串的边界,替换:

while (x <= MyText.Length) {

while (x < MyText.Length) {

答案 1 :(得分:2)

while(x < MyText.Length)

while(x <= MyText.Length - 1)

如果数组的长度= x,则其最后一个索引是x-1,因为数组从0索引

开始

答案 2 :(得分:1)

如果我理解你的权利(没有相关的样本),我建议使用 Linq 这是不可能的;尝试使用模块化arimethics - index % MyText.Length来避免索引问题

string source = ".My Secret Message for Test";
string MyText = "Hello World";

// If user input starts with dot
if (source.StartsWith("."))
  source = string.Concat(source
    .Select((c, index) => MyText[index % MyText.Length])); 

TextBox1.Text = source;

结果:

   Hello WorldHello WorldHello

答案 3 :(得分:0)

首先,@ Daniell89说:

使用

while(x < MyText.Length)

其次: 您不仅将x用作MyText的索引,还将其用作textBox1.Text的索引。所以你需要检查它是否足够长。

你可以这样做:

while (x < Math.Min(MyText.Length, textBox1.Text.Length)
{
    NewText = textBox1.Text.Replace(textBox1.Text[x], MyText[x]);
    TextBox1.Text = NewText;
    x++;
}

但我觉得在这里使用for语言会更好。