在我参加的最近一次采访中,被问到的编程问题是这个。编写一个将两个字符串作为输入的函数。输出应该是连接的结果。
条件:不应该使用StringBuffer.Append或StringBuilder.Append或字符串对象进行连接;也就是说,他们希望我实现StringBuilder或StringBuffer的Append函数的伪代码实现。
这就是我所做的:
static char[] AppendStrings(string input, string append)
{
char[] inputCharArray = input.ToCharArray();
char[] appendCharArray = append.ToCharArray();
char[] outputCharArray = new char[inputCharArray.Length + appendCharArray.Length];
for (int i = 0; i < inputCharArray.Length; i++)
{
outputCharArray[i] = inputCharArray[i];
}
for (int i = 0; i < appendCharArray.Length; i++)
{
outputCharArray[input.Length + i] = appendCharArray[i];
}
return outputCharArray;
}
虽然这是一个有效的解决方案,但还有更好的办法吗?
答案 0 :(得分:4)
LINQ合法吗? strings 只是可以被视为chars的枚举,因此它们可以与LINQ一起使用(即使涉及一些成本,请参阅注释):
string a = "foo";
string b = "bar";
string c = new string(a.AsEnumerable().Concat(b).ToArray());
或使用您的方法签名:
static char[] AppendStrings(string input, string append)
{
return input.AsEnumerable().Concat(append).ToArray();
}
答案 1 :(得分:4)
您可以致电CopyTo
:
char[] output = new char[a.Length + b.Length];
a.CopyTo(0, output, 0, a.Length);
b.CopyTo(0, output, a.Length, b.Length);
return new String(output);
如果他们不喜欢,请拨打.ToCharArray().CopyTo(...)
。
你也可以作弊:
return String.Join("", new [] { a, b });
return String.Format("{0}{1}", a, b);
var writer = new StringWriter();
writer.Write(a);
writer.Write(b);
return writer.ToString();
答案 2 :(得分:2)
我会做类似以下的事情(为了简洁省略了参数检查)
public static string Append(string left, string right) {
var array = new char[left.Length + right.Length];
for (var i = 0; i < left.Length; i++) {
array[i] = left[i];
}
for (var i = 0; i < right.Length; i++) {
array[i + left.Length] = right[i];
}
return new string(array);
}
答案 3 :(得分:0)
在Java中,您可以使用不使用StringBuilder或StringBuffer的concat
。
String a = "foo";
String b = "bar";
String ab = a.concat(b);
来自Oracle JDK的String.concat(String)的源代码。
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
}
答案 4 :(得分:0)
java默认支持&#34; +&#34;用于附加字符串
String temp="some text";
for(int i=0;i<10;i++)
{
temp=temp+i;
}
或
temp=temp+" some other text"