每个人都知道如何用以下字符替换字符串中的字符:
string text = "Hello World!";
text = text.Replace("H","J");
但我需要的是替换字符串中的多个字符 类似的东西:
string text = textBox1.Text;
text = text.Replace("a","b")
text = text.Replace("b","a")
现在结果是aa,但如果用户输入ab,我希望结果为ba
答案 0 :(得分:3)
有多种方法可以做到这一点。
char[] temp = input.ToCharArray();
for (int index = 0; index < temp.Length; index++)
switch (temp[index])
{
case 'a':
temp[index] = 'b';
break;
case 'b':
temp[index] = 'a';
break;
}
string output = new string(temp);
这将简单地将字符串复制到字符数组,自行修复每个字符,然后将数组转换回字符串。不会让任何角色与任何其他角色混淆。
您可以利用this overload of Regex.Replace:
public static string Replace(
string input,
string pattern,
MatchEvaluator evaluator
)
这将获取将为每个匹配调用的委托,并返回最终结果。代表负责返回每个匹配应替换的内容。
string output = Regex.Replace(input, ".", ma =>
{
if (ma.Value == "a")
return "b";
if (ma.Value == "b")
return "a";
return ma.Value;
});
答案 1 :(得分:0)
当您在这样的循环中连接多个字符串时,使用StringBuilder
,所以我建议使用以下解决方案:
StringBuilder sb = new StringBuilder(text.Length);
foreach(char c in text)
{
sb.Append(c == 'a' ? 'b' : 'a');
}
var result = sb.ToString();
答案 2 :(得分:0)
不要为同一个字符串多次调用String.Replace!它每次都会创建一个新字符串(每次都必须循环遍历整个字符串),如果大量使用,会导致内存压力和处理器时间浪费。
你能做什么:
创建一个与输入字符串长度相同的新char数组。迭代输入字符串的所有字符。对于每个字符,检查是否应该替换它。如果应该替换它,请将替换写入先前创建的char数组,否则将原始char写入该数组。然后使用该char数组创建一个新字符串。
string inputString = "aabbccdd";
char[] chars = new char[inputString.Length];
for (int i = 0; i < inputString.Length; i++)
{
if (inputString[i] == 'a')
{
chars[i] = 'b';
}
else if (inputString[i] == 'b')
{
chars[i] = 'a';
}
else
{
chars[i] = inputString[i];
}
}
string outputString = new string(chars);
当打算替换很多不同的角色时,请考虑使用switch
。
答案 3 :(得分:0)
根据您的特殊要求,我建议您使用以下内容:
String[] token = line.split(" "); // create string of tokens
if (token.length >= 3) {
list.add(new Node(token[0], token[1], Integer.parseInt(token[2])));
}
此特定输入的输出字符串为string input = "abcba";
string outPut=String.Join("",input.ToCharArray()
.Select(x=> x=='a'? x='b':
(x=='b'?x='a':x))
.ToArray());