-3

我想用其他字符替换一些字符,我之前在这里问过这样的问题,他们建议使用函数替换,但是当我使用替换时,当我尝试用另一个字符替换字符时,它会在特定条件下删除它删除的另一个字符也是在一个字符串中,我不想删除。这是我的代码以获得更多说明

for (int i = 0; i < words.Length; i++)
{
    for (int j = 1; j < words[i].Length; j++)
    {
        if (j + 2 == words[i].Length)
            break;

        if (words[i][j] == words[i][j + 2] && words[i][j + 1] == '0')
        {
            words[i] = words[i].Replace(words[i][j + 1].ToString(), string.Empty);
        }
    }
}

如果根据我的代码我的字符串是“a1010”,那么最终的字符串应该是 a110,但输出是 a11,我想知道为什么它会删除最后的 0?

4

4 回答 4

4

.Replace用指定的替换字符替换所有出现的给定字符。这就是为什么两次出现的 0 都被删除的原因。

由于您正在找到要替换的字母,请尝试使用Remove,然后跳出循环,这样您就不会删除第二次出现的字母。

于 2012-05-24T15:43:26.633 回答
1

这条线

words[i] = words[i].Replace(words[i][j + 1].ToString(), string.Empty);

用空字符串替换word中 position 处的所有字符实例。在您的示例中,这意味着所有s 都被删除。j+1i 0

于 2012-05-24T15:42:29.180 回答
1
 words[i] = words[i].Replace(words[i][j + 1].ToString(), string.Empty);

基本上解决...

 words[i] = words[i].Replace("0", "");

(至少在您描述的特定迭代中)

用空字符串替换字符串中的所有 0。如果您知道要删除的字符的确切索引,则可以这样做...

words[i].Remove(j + 1, 1);
于 2012-05-24T15:44:05.077 回答
0

您可以使用以下方法替换第一次出现:

public static string Replace(string Word, string oldChar, string newChar)
{
    for (int i = 0; i < Word.Length; i++)
    {
        string aux = "" + Word[i];
        if (aux.Equals(oldChar))
        {
            Word = Word.Remove(i, 1);
            Word = Word.Insert(i, newChar);

            return Word;
        }
    }
    return Word;
}
于 2012-05-24T15:56:34.877 回答