在 Java/C# 中追加字符串而不使用 StringBuffer.Append 或 StringBuilder.Append

Mag*_*gic 4 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

Bro*_*ass 5

LINQ 合法吗?字符串只是可以被视为字符的枚举,因此它们可以与 LINQ 一起使用(尽管涉及一些成本,请参阅注释):

string a = "foo";
string b = "bar";

string c = new string(a.AsEnumerable().Concat(b).ToArray());
Run Code Online (Sandbox Code Playgroud)

或使用您的方法签名:

 static char[] AppendStrings(string input, string append)
 {
   return input.AsEnumerable().Concat(append).ToArray();
 }
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 5

您可以致电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);
Run Code Online (Sandbox Code Playgroud)

如果他们不喜欢这样,请致电.ToCharArray().CopyTo(...)

你还可以作弊:

return String.Join("", new [] { a, b });
Run Code Online (Sandbox Code Playgroud)
return String.Format("{0}{1}", a, b);
Run Code Online (Sandbox Code Playgroud)
var writer = new StringWriter();
writer.Write(a);
writer.Write(b);
return writer.ToString();
Run Code Online (Sandbox Code Playgroud)