web-dev-qa-db-ja.com

文字列から特定の文字のすべてのインスタンスを削除する方法

こんにちは、文字列から特定の文字をすべて削除しようとしています。私はString.Replace、しかし、それは何もしないので、理由はわかりません。これが私の現在のコードです。

    public string color;
    public string Gamertag2;
    private void imcbxColor_SelectedIndexChanged(object sender, EventArgs e)
    {
        uint num;
        XboxManager manager = new XboxManagerClass();
        XboxConsole console = manager.OpenConsole(cbxConsole.Text);
        byte[] Gamertag = new byte[32];
        console.DebugTarget.GetMemory(0x8394a25c, 32, Gamertag, out num);
        Gamertag2 = Encoding.ASCII.GetString(Gamertag);
        if (Gamertag2.Contains("^"))
        {
            Gamertag2.Replace("^" + 1, "");
        }
        color = "^" + imcbxColor.SelectedIndex.ToString() + Gamertag2;
        byte[] gtColor = Encoding.ASCII.GetBytes(color);
        Array.Resize<byte>(ref gtColor, gtColor.Length + 1);
        console.DebugTarget.SetMemory(0x8394a25c, (uint)gtColor.Length, gtColor, out num);
    }

基本的に、Xbox 360から文字列のバイト値を取得し、それを文字列形式に変換します。しかし、「^」のすべてのインスタンスを削除したいString.Replaceは機能していないようです。それは絶対に何もしません。以前と同じように文字列を残します。なぜこれを行うのかについて私に説明してもらえますか?

29
Ian Lundberg

String.Replace の戻り値を元の文字列インスタンスに割り当てる必要があります。

したがって、代わりに(Contains check)の必要はありません

if (Gamertag2.Contains("^"))
{
    Gamertag2.Replace("^" + 1, "");
}

ちょうどこれ(その神秘的な+1とは何ですか?):

Gamertag2 = Gamertag2.Replace("^", "");
62
Tim Schmelter

2つのこと:

1)C#文字列は不変です。これを行う必要があります:

_Gamertag2 = Gamertag2.Replace("^" + 1, "");
_

2)_"^" + 1_?なぜあなたはこれをやっている?あなたは基本的にGamertag2.Replace("^1", "");と言っていますが、これはあなたが望むものではないと確信しています。

12
Mike Park

登山が言ったように、あなたの問題は間違いなく

Gamertag2.Replace("^"+1,"");

その行は、文字列から「^ 1」のインスタンスのみを削除します。 「^」のすべてのインスタンスを削除する場合、必要なものは次のとおりです。

Gamertag2.Replace("^","");
2
stackPusher