我需要使用.replace
替换C#中的多个字符而不创建循环,从而导致循环中最终字符的最终字符串
示例代码:
string t1="ABCD";
t1.Replace('A','B').Replace('B','C').Replace('C','D').Replace('D','E');
结果: EEEE
预期结果: BCDE
如何获得预期的结果,我对字符串中的大量字符执行此操作< = 100所以我需要一个简单的方法。我可以使用替换方法吗?还是有其他方法吗?
答案 0 :(得分:2)
在这个特定示例中,如果您只是颠倒Replace(...)调用的顺序,它应该可以工作。
string t1="ABCD";
t1.Replace('D','E').Replace('C','D').Replace('B','C').Replace('A','B');
答案 1 :(得分:1)
如果您不想自己编写,可能最简单的编码方法是使用正则表达式:
Regex.Replace(mystring, "[ABCD]", s =>
{
switch (s)
{
case "A": return "B";
case "B": return "C";
case "C": return "D";
case "D": return "E";
default: return s;
}
});
答案 2 :(得分:1)
这可能会为你做到这一点
string t1 = "ABCD";
var ans = string.Join("", t1.Select(x => x = (char) ((int) x + 1)));
此代码将提供字符串的下一个字符。但是字母表的最后一个字符z
和Z
的情况将会失败。失败意味着它不会是a
或A
而是会提供{
和[
。但大多数情况下,这可用于获取字符串中的下一个字符。
答案 3 :(得分:0)
在回答之前让我描述一下你的情况出了什么问题,实际上,替换操作会返回一个新的字符串实例,所以在第一次替换之后(t1.Replace('A','B')
生成的字符串变为BBCD
( A
替换为B
,并且您正在此字符串中执行下一个替换操作,因此每个B
都将替换为C
。所以在最后更换输入字符串之前变为DDDD
。
我有一个使用LINQ和String.Join的简单解决方案,你可以看一下这里的working example
string inputString = "ABCD";
var ReplacedString = String.Join("", inputString.Select(x => x == 'A' ? 'B' :
x == 'B' ? 'C' :
x == 'C' ? 'D' :
x == 'D' ? 'E' :
x));
答案 4 :(得分:0)
已发布的答案将解决您提供的直接示例,但您也要说必须为字符串中的大量字符执行此操作。我可能误解了你的要求,但听起来你只是试图“增加”每个字母。也就是说,A
变为B
,I
变为J
等。
如果是这种情况,循环(不确定为什么要避免循环;它们似乎是最好的选项)将比将一堆替换串起来要好得多,尤其是对于更长的字符串。
以下代码假设您的唯一输入是大写拉丁字母,而对于字母Z
,我刚刚包装了字母,因此它将替换为A
。
string t1 = "ABCDEFGXYZ";
StringBuilder sb = new StringBuilder();
foreach (char character in t1)
{
if (character == 'Z')
{
sb.Append('A');
}
else
{
sb.Append((Char)(Convert.ToUInt16(character) + 1));
}
}
Console.WriteLine(sb.ToString());
以下代码采用输入ABCDEFGXYZ
并输出BCDEFGHYZA
。这也可以扩展到更大的输入。