0

文字列内の文字を置き換えるには、動作する ASP.NET C# コードが必要です。

私の次のコードは正常に動作しますが、入力「a」の場合は「678d」として出力されますが、入力「c」の場合、出力は正しい、つまり「8d」です...ここでは、残りの値も。コードが段階的なプロセスで実行されていることがわかります...これにより、オーバーロードされた出力が得られます。

{
    StringBuilder builder = new StringBuilder();
    builder.Replace("a", "6b");
    builder.Replace("b", "7c");
    builder.Replace("c", "8d");
    return builder.ToString();
}

ここで、「a」を「6b」に置き換える必要があり、残りの値をロードしないでください。

4

5 に答える 5

1

実際の置換からより独立させるには、双方向の置換を行うことができます。

最初に、出現箇所を文字列に表示されないプレースホルダーに置き換えます (「a」を置き換える %%1%%、「b」を置き換える %%2%% など)。

次に、2 回目の実行で、%%1%% を "8d" に、%%2%% を "7c" に置き換えます。

これはどんな場合でも機能します。

于 2011-02-23T09:26:19.103 に答える
1

あなたのコードは、あるステートメントから他のステートメントに落ちています。最初に a を 6b に置き換え、次に 6b の b を 7c に置き換えます。

したがって、特定のケースでは、ステートメントの順序を変更して、後のステートメントが前のステートメントに反応しないようにすることができます。

builder.Replace("c", "8d");

builder.Replace("b", "7c");

builder.Replace("a", "6b");

于 2011-02-23T08:53:22.990 に答える
0

文字の後ろにスペースを使用することもできます。「a」を「a」に置き換え、「a」を必要なテキストに置き換えます。

于 2011-02-23T09:33:58.610 に答える
0

置換の順序を変更する必要があります。

StringBuilder builder = new StringBuilder();
builder.Replace("c", "8d");
builder.Replace("b", "7c");
builder.Replace("a", "6b");
return builder.ToString();
于 2011-02-23T08:49:58.333 に答える
0

これを試して:

Regex rx = new Regex("a|b|c");

string str = "abc";

MatchEvaluator matcher = match => {
    string value = match.Value;
    if (value == "a") {
        return "6b";
    } else if (value == "b") {
        return "7c";
    } else {
        return "8d";
    }
};

var str2 = rx.Replace(str, matcher);

正規表現を使用したくない場合は、次のようにします。

static void Main(string[] args)
{
    var replacements = new[] {
        new Tuple<string, string>("a", "6b"), 
        new Tuple<string, string>("b", "6c"), 
        new Tuple<string, string>("c", "6a")
    };

    string str = "adbc";
    var str2 = MultipleReplace(str, replacements);
}

static string MultipleReplace(string str, IEnumerable<Tuple<string, string>> replacements) {
    StringBuilder str2 = new StringBuilder();

    for (int i = 0; i < str.Length; i++) {
        bool found = false;

        foreach (var rep in replacements) {
            if (str.Length - i >= rep.Item1.Length && str.Substring(i, rep.Item1.Length) == rep.Item1) {
                str2.Append(rep.Item2);
                i += rep.Item1.Length - 1;
                found = true;
                break;
            }
        }

        if (!found) {
            str2.Append(str[i]);
        }
    }

    return str2.ToString();
}
于 2011-02-23T09:31:35.770 に答える