在不使用StringBuffer.Append或StringBuilder.Append的情况下在Java / C#中添加字符串

时间:2011-04-05 22:06:33

标签: c# java

在我参加的最近一次采访中,被问到的编程问题是这个。编写一个将两个字符串作为输入的函数。输出应该是连接的结果。

条件:不应该使用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;
    }

虽然这是一个有效的解决方案,但还有更好的办法吗?

5 个答案:

答案 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"