2

.replace を使用した文字の置換に問題があります

例:

string word = "Hello";
oldValue = "H";
newValue = "A"; 

word = word.replace(oldValue,newValue)

上記のコードはうまく機能しています。H は A に置き換えられ、出力は Aello になります。

今、私は1つだけでなくより多くのnewValueを使用したいので、Hは「A」だけでなくランダムなnewValueに置き換えることができます

newValue を変更すると:

newValue = 'A', 'B', 'C';

.Replace 関数でエラーが発生する

4

5 に答える 5

2

クラスを使用して、配列System.Random内のランダムな項目を取得してみてください。newValue

string word = "Hello";
var rand = new System.Random();
var oldValue = "H";
var newValue = new[] { "A", "B", "C" };

word = word.Replace(oldValue, newValue[rand.Next(0, 2)]);
于 2013-03-06T09:34:43.613 に答える
2

このReplaceメソッドはランダム置換をサポートしていません。ランダム部分を自分で実装する必要があります。

Replaceメソッドは置換のコールバックもサポートしていませんが、メソッドはサポートしていますRegex.Replace:

string word = "Hello Hello Hello";
Random rnd = new Random();
string[] newValue = { "A", "B", "C" };
word = Regex.Replace(word, "H", m => newValue[rnd.Next(newValue.Length)]);

Console.WriteLine(word);

出力例:

Cello Bello Aello
于 2013-03-06T09:37:29.023 に答える
0

興味深いタスクですが、ここにあります:)

string word = "Hello";
char[] repl = {'A', 'B', 'C'};
Random rnd = new Random();
int ind = rnd.Next(0, repl.Length);

word = word.Replace('H', repl[ind]);

編集: rnd.Next の maxValue は排他的であるため、(repl.Length -1) の代わりに repl.Length を使用する必要があります。

于 2013-03-06T09:34:53.960 に答える
0

A ~ Z の間のランダムな大文字 (65 ~ 90) に置き換えます。

string oldValue = "H";

string newValue = Convert.ToString((char)(new Random().Next(65, 91)));
word.Replace(oldValue, newValue);
于 2013-03-06T09:45:09.483 に答える