C# 用另一个字符串替换字符串中的字符
所以我想做的是: 字符串的示例是A4PC 例如,我试图用[A4]替换任何发生的A,因此我将得到与[A4]类似的任何发生的4 [A4][A4]个人电脑 我试着在绳子上做一个正常的替换,但发现我得到了 [A[A4]]个人电脑C# 用另一个字符串替换字符串中的字符,c#,string,linq,C#,String,Linq,所以我想做的是: 字符串的示例是A4PC 例如,我试图用[A4]替换任何发生的A,因此我将得到与[A4]类似的任何发生的4 [A4][A4]个人电脑 我试着在绳子上做一个正常的替换,但发现我得到了 [A[A4]]个人电脑 string badWordAllVariants = restriction.Value.Replace("A", "[A4]").Replace("4", "[A4]") 因为我连续得了两个A导致了一个问题 因此,我认为它比替换字符串更好,
string badWordAllVariants =
restriction.Value.Replace("A", "[A4]").Replace("4", "[A4]")
因为我连续得了两个A导致了一个问题
因此,我认为它比替换字符串更好,我需要在每个字符的基础上进行替换,然后再次构建一个字符串
Linq中是否有这样的功能?这里不需要任何Linq-工作正常:
string input = "AAPC";
string result = input.Replace("A", "[A4]"); // "[A4][A4]PC"
更新:对于您的更新要求,我建议使用
在这里,您不需要任何LINQ-工作正常:
string input = "AAPC";
string result = input.Replace("A", "[A4]"); // "[A4][A4]PC"
更新:对于您的更新要求,我建议使用
这对我来说很有效:
string x = "AAPC";
string replace = x.Replace("A", "[A4]");
编辑:
根据更新的问题,该问题是第二次替换。为了替换多个字符串,您需要按顺序执行以下操作:
var original = "AAPC";
// add arbitrary room to allow for more new characters
StringBuilder resultString = new StringBuilder(original.Length + 10);
foreach (char currentChar in original.ToCharArray())
{
if (currentChar == 'A') resultString.Append("[A4]");
else if (currentChar == '4') resultString.Append("[A4]");
else resultString.Append(currentChar);
}
string result = resultString.ToString();
在本例中,您可以使用任何替换字母“A”和“4”来运行此例程,它应该可以工作。如果您想替换字符串,代码的结构将类似,但您需要向前看,并可能使用for循环。希望这有帮助
顺便说一下,您希望在这里使用字符串生成器,而不是字符串,因为字符串是静态的,这意味着每次循环时都会分配空间。不好 这对我来说很有效:
string x = "AAPC";
string replace = x.Replace("A", "[A4]");
编辑:
根据更新的问题,该问题是第二次替换。为了替换多个字符串,您需要按顺序执行以下操作:
var original = "AAPC";
// add arbitrary room to allow for more new characters
StringBuilder resultString = new StringBuilder(original.Length + 10);
foreach (char currentChar in original.ToCharArray())
{
if (currentChar == 'A') resultString.Append("[A4]");
else if (currentChar == '4') resultString.Append("[A4]");
else resultString.Append(currentChar);
}
string result = resultString.ToString();
在本例中,您可以使用任何替换字母“A”和“4”来运行此例程,它应该可以工作。如果您想替换字符串,代码的结构将类似,但您需要向前看,并可能使用for循环。希望这有帮助
顺便说一下,您希望在这里使用字符串生成器,而不是字符串,因为字符串是静态的,这意味着每次循环时都会分配空间。不好 我认为这应该能奏效
string str = "AA4PC";
string result = Regex.Replace(str, @"(?<Before>[^A4]?)(?<Value>A|4)(?<After>[^A4]?)", (m) =>
{
string before = m.Groups["Before"].Value;
string after = m.Groups["After"].Value;
string value = m.Groups["Value"].Value;
if (before != "[" || after != "]")
{
return "[A4]";
}
return m.ToString();
});
它将替换[A4]中尚未替换的A和4。我认为这应该可以解决问题
string str = "AA4PC";
string result = Regex.Replace(str, @"(?<Before>[^A4]?)(?<Value>A|4)(?<After>[^A4]?)", (m) =>
{
string before = m.Groups["Before"].Value;
string after = m.Groups["After"].Value;
string value = m.Groups["Value"].Value;
if (before != "[" || after != "]")
{
return "[A4]";
}
return m.ToString();
});
它将替换[A4]中尚未替换的A和4。看起来您的替换正在运行不止一次。替换本身工作正常。我用AAPC测试了一个正常的替换,我得到了[A4][A4]PC。。。可能是你做了什么导致了这种行为?对不起,是的,我现在正在添加评论!看起来您的替换正在运行多次。替换本身工作正常。我用AAPC测试了一个正常的替换,我得到了[A4][A4]PC。。。可能是你做了什么导致了这种行为?对不起,是的,我现在正在添加评论!啊哇好的,看起来不错,所以我可以在我的字符串中有无限数量的字符,我可以通过添加a | 4 | 5等来替换[A4]?啊哇好的,看起来不错,所以我可以在我的字符串中有无限数量的字符,我可以通过添加a | 4 | 5等来替换[A4]?