替换字符串中的多个子字符串

RRM*_*RRM 1 c# string algorithm replace

我需要替换字符串中的几个子字符串

让我们说:

  • 将原始字符串中的所有A替换为B.
  • 将原始字符串中的所有B替换为D.

所以例如"AB给BD"

"天真"的方法不能正常工作:

string S="AB";
S=S.Replace("A","B");
S=S.Replace("B","D");
Run Code Online (Sandbox Code Playgroud)

因为它会给DD而不是BD.(第一个A改为B但后来不必要地改为D)

如何处理此类案件?使用任何大小的子串进行这样的单独替换是否有意义?

编辑:我给了一些不是现实生活中的例子,实际上它可以按相反的顺序进行(首先是B到D,然后是A到B)但是正如其他人注意到我对更通用的解决方案感兴趣:对于任何char替换列表以及任何单词替换列表

对于字符,我想现在一个好方法只是遍历字符串中的所有字符并构建一个新字符串,在必要时进行替换.

对于单词,我想它可能会更难,如果一个被替换的单词是另一个单词的一部分怎么办?

例如

string S="man superman woman superwoman"
Run Code Online (Sandbox Code Playgroud)

我想把"男人"改为"男孩",将"女人"改为"女孩"只作为单个单词

Omr*_*ron 5

假设没有周期,你需要反过来做.含义:

string S="AB";
S=S.Replace("B","D");
S=S.Replace("A","B");
Run Code Online (Sandbox Code Playgroud)

这样,B切换到D,然后A切换到B,您没有不需要的更改.

正如Niklas B.正确地指出的那样,在一般子串的情况下,可能采取不同的方式.

我将迭代字符串,存储任何子字符串出现的索引.完成后,我将继续执行实际切换.这样您就无法"运行"您所做的更改.