-3

一部の文字を他の文字に置き換えたいのですが、ここで前にこのような質問をしましたが、Replace 関数を使用することをお勧めしていますが、Replace を使用すると、文字を別の文字に置き換えようとすると特定の状態になり、別の文字も削除されます文字列にあり、削除したくありません。より明確にするためのコードは次のとおりです

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代わりに使用してみてから、ループから抜け出して、2番目の文字も削除しないようにします。

于 2012-05-24T15:43:26.633 に答える
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 に答える
1

この行

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

word 内の位置にある文字のすべてのインスタンスを空の文字列に置き換えます。あなたの例では、それはすべての s が削除されることを意味します。j+1i 0

于 2012-05-24T15:42:29.180 に答える
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 に答える