我在开发应用程序时遇到问题。 基本上, 我有一个固定的字符串,让我们说“IHaveADream”
我现在想要用户插入另一个字符串,为了我固定长度的目的,然后将固定字符串的每个字符与用户插入的字符串的每个字符连接起来。 例如 用户插入“ByeBye” 然后输出将是: “IBHyaevBeyAeDream”。
如何做到这一点?
我在for语句中尝试过String.Concat和String.Join,没有运气。
答案 0 :(得分:5)
一个内存高效的选项是使用字符串构建器,因为原始字符串和用户输入都可能相当大。正如Kris所提到的,您可以将StringBuilder容量初始化为两个字符串的总长度。
void Main()
{
var start = "IHaveADream";
var input = "ByeBye";
var sb = new StringBuilder(start.Length + input.Length);
for (int i = 0; i < start.Length; i++)
{
sb.Append(start[i]);
if (input.Length >= i + 1)
sb.Append(input[i]);
}
sb.ToString().Dump();
}
这只能安全地解释输入字符串的长度短于或等于起始字符串。如果你有一个较长的输入字符串,你需要将较长的长度作为for循环迭代的终点,并检查每个数组索引是否超出范围。
void Main()
{
var start = "IHaveADream";
var input = "ByeByeByeByeBye";
var sb = new StringBuilder(start.Length + input.Length);
var length = start.Length >= input.Length ? start.Length : input.Length;
for (int i = 0; i < length; i++)
{
if (start.Length >= i + 1)
sb.Append(start[i]);
if (input.Length >= i + 1)
sb.Append(input[i]);
}
sb.ToString().Dump();
}
答案 1 :(得分:0)
您可以按照自己的顺序创建array of characters然后re-combine them。
char[] chars1 = "IHaveADream".ToCharArray();
char[] chars2 = "ByeBye".ToCharArray();
// you can create a custom algorithm to handle
// different size strings.
char[] c = new char[17];
c[0] = chars1[0];
c[1] = chars2[0];
...
c[13] = chars1[10];
string s = new string(c);
答案 2 :(得分:0)
如果您不太关心内存使用或性能,可以使用:
public static string concatStrings(string value, string value2)
{
string result = "";
int i = 0;
for (i = 0; i < Math.Max(value.Length, value2.Length) ; i++)
{
if (i < value.Length) result += value[i].ToString();
if (i < value2.Length) result += value2[i].ToString();
}
return result;
}
用法:
string conststr = "IHaveADream";
string input = "ByeBye";
var result = ConcatStrings(conststr, input);
Console.WriteLine(result);
输出:IBHyaevBeyAeDream
P.S。 刚刚检查了两种方法的性能(使用strBuilder和简单的cancatenation),看起来这两种方法都需要相同的时间来执行(如果你只有一个操作)。它的主要原因是字符串构建器需要相当长的时间来初始化,而使用连接时我们不需要它。
但是如果你必须处理1500个字符串之类的东西,那么它就是不同的故事和字符串构建器更多的选择。
对于100 000个方法执行,它分别显示85(str buld)vs 22(concat)ms。
答案 3 :(得分:0)
var firstString = "Ihaveadream";
var secondString = "ByeBye";
var stringBuilder = new StringBuilder();
for (int i = 0; i< firstString.Length; i++) {
stringBuilder .Append(str[i]);
if (i < secondString.Length) {
stringBuilder .Append(secondStr[i]);
}
}
var result = stringBuilder.ToString();