如何在C#中仅替换 3的倍数?比方说,我有字符串"000100000"
,我希望"000"
替换为"+"
,但只有每个三个字符组。附加条件:应从开始更改组<,>对于"000100000"
,它应输出"+100+"
。
答案 0 :(得分:1)
您可以使用正则表达式。
(0{3}(?!0+))
这使用负前瞻来确保在一组三个0之后没有任何其他零 - 换句话说,对于任意数量的0的序列,它只与最后一个匹配3。
如果你想做一些看起来微微不同的前瞻和外观,你可以修改它。
答案 1 :(得分:0)
您可以使用Substring:
执行此操作 string strReplace = "000100000";
//Store your string on StringBuilder to edit the string
StringBuilder sb = new StringBuilder();
sb.Append("+");
sb.Append(strReplace.Substring(0, 3)); //Use substring, 0 is the start of index and 3 is the length as your requirement
sb.Append("+");
sb.Append(strReplace.Substring(3, 3));
sb.Append("+");
sb.Append(strReplace.Substring(6, 3));
sb.Append("+");
strReplace = sb.ToString(); //Finally replace your string instance with your result
或者通过for循环,但这次而不是使用子字符串,我们使用Char数组来获取字符串中的每个字符:
string strReplace = "000100000";
char[] chReplace = strReplace.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int x = 0; x <= 8; x++)
{
if (x == 0 || x == 3 || x == 6 || x == 9)
{
sb.Append("+");
sb.Append(chReplace[x]);
}
else
{
sb.Append(chReplace[x]);
}
}
sb.Append("+");
strReplace = sb.ToString();
答案 2 :(得分:0)
我建议使用正则表达式,例如:
string source = "000100000";
// "+100+"
string result = Regex.Replace(
source,
"0{3,}",
match => new string('0', match.Length % 3) + new string('+', match.Length / 3));
试验:
001 -> 001
0001 -> +1
000100 -> +100
0001000 -> +1+
00010000 -> +10+
000100000 -> +100+
0001000000 -> +1++
答案 3 :(得分:0)
好的,这些答案中有很多是针对3 '0'
s的检测组。这是一个回答3个任意组的小组(以三个字符为一组读取字符串):
string GroupsOfThree(string str)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i + 2 < str.Length; i += 3)
{
string sub = str.Substring(i, 3);
if (sub.All(c => c == sub[0]))
sb.Append("+");
else
sb.Append(sub);
}
return sb.ToString();
}
答案 4 :(得分:0)
您可以使用替换正则表达式。
"[0]{3}|[1]{3}"
上面的正则表达式可以在C#中使用如下:
string k = "000100000";
Regex pattern = new Regex("[0]{3}|[1]{3}");
pattern.Replace(k, "+");
答案 5 :(得分:-1)
在替换之前和解决问题之后反转字符串。
类似的东西:
string ReplaceThreeZeros(string text)
{
var reversed = new string(text.Reverse().ToArray());
var replaced = reversed.Replace("000","+");
return new string(replaced.Reverse().ToArray());
}