0

我有一个应用程序,在这个应用程序中,可以使用一个函数将单词中的某些字符替换为其他字符

var newCharacter = "H";

if (/*something happens here and than the currentCharacter will be replaced*/)
{
    // Replace the currentCharacter in the word with a random newCharacter.
    wordString = wordString.Replace(currentCharacter, newCharacter);
}

现在所有字符都将替换为上面带有“H”的代码。但我想要更多的字母,例如 H、E、A、S

做这个的最好方式是什么?

当我这样做时:

var newCharacter = "H" + "L" + "S";

它用 H AND L AND S 替换了 currentCharacter 但我只是希望它替换为 H OR L OR S 而不是全部三个

因此,如果您有一个带有 HELLO 的单词并且您想用 newCharacter 替换 O,我现在的输出是 HELLHLS O -> HLS 但 O 需要是 -> H 或 L 或 S

4

3 回答 3

0

这是使用 LINQ 的一种方法。您可以在数组excpChar中添加要删除的字符

char[] excpChar= new[] { 'O','N' };
string word = "LONDON";

var result = excpChar.Select(ch => word = word.Replace(ch.ToString(), ""));
Console.WriteLine(result.Last());
于 2013-03-06T09:11:30.543 回答
0

Replace 函数一次替换所有出现,这不是我们想要的。让我们做一个 ReplaceFirst 函数,只替换第一次出现(可以用它做一个扩展方法):

static string ReplaceFirst(string word, char find, char replacement)
{
    int location = word.IndexOf(find);
    if (location > -1)
        return word.Substring(0, location) + replacement + word.Substring(location + 1);
    else
        return word;
}

然后我们可以使用随机生成器通过连续调用 ReplaceFirst 将目标字母替换为不同的字母:

string word = "TpqsdfTsqfdTomTmeT";
char find = 'T';
char[] replacements = { 'H', 'E', 'A', 'S' };
Random random = new Random();

while (word.Contains(find))
    word = ReplaceFirst(word, find, replacements[random.Next(replacements.Length)]);

现在的词可能是 EpqsdfSsqfdEomHmeS 或 SpqsdfSsqfdHomHmeE 或 ...

于 2013-03-06T09:12:17.710 回答
0

您可以执行以下操作:

string test = "abcde";
var result = ChangeFor(test, new char[] {'b', 'c'}, 'z');
// result = "azzde"

与 ChangeFor :

private string ChangeFor(string input, IEnumerable<char> before, char after)
{
    string result = input;
    foreach (char c in before)
    {
        result = result.Replace(c, after);
    }
    return result;
}
于 2013-03-06T09:14:21.357 回答