解决方案应该很简单,但仍然很困难。我如何反转分组符号,如方括号、圆括号、大括号...
我的字符串是这样的:Lorem ipsum dolor )sit amet(, consectetur ]adipiscing[ elit
我希望输出为 Lorem ipsum dolor (sit amet), consectetur [adipiscing] elit
关键是如果我在多次传递中一个符号一个符号地变换,它会被变换两次:
text = text.Replace('[', ']');
text = text.Replace(']', '[');
text = text.Replace('(', ')');
text = text.Replace(')', '(');
结果是 Lorem ipsum dolor (sit amet(, consectetur [adipiscing[ elit
如何一次性转换文本?
最佳答案
古人会做...你一个字符一个字符地重建字符串...
string str = "Lorem ipsum dolor )sit amet(, consectetur ]adipiscing[ elit";
var sb = new StringBuilder(str.Length);
foreach (char ch in str)
{
switch (ch)
{
case '[':
sb.Append(']');
break;
case ']':
sb.Append('[');
break;
case '(':
sb.Append(')');
break;
case ')':
sb.Append('(');
break;
default:
sb.Append(ch);
break;
}
}
string str2 = sb.ToString();
或者您可以开始混淆 C# 的类(class):-)
string str3 = new Regex(@"[\[\]()]")
.Replace(str, x => ((char)(x.Value[0] + (x.Value == "[" || x.Value == "(" ?
1 + (x.Value[0] / '[') :
-1 - (x.Value[0] / '[')))).ToString());
关于c# - 一次性替换(反转)左括号和右括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29770615/