【问题标题】:Failing to reverse stringbuilder result [duplicate]无法反转字符串生成器结果[重复]
【发布时间】:2018-06-05 05:55:40
【问题描述】:

我正在尝试反转并返回 StringBuilder 结果,但在尝试按return sb.Reverse().ToString() 的顺序尝试所有变体时出现以下错误:

  1. 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“字符串”。

  2. “StringBuilder”不包含“Reverse”的定义,并且找不到接受“StringBuilder”类型的第一个参数的扩展方法“Reverse”

以相反的顺序返回 stringbuilder 结果的正确格式是什么?

public static string Reverse( string s )
{
    char[] charArray = s.ToCharArray();
    Array.Reverse( charArray );
    return new string( charArray );
}

不幸的是,这段代码没有一行完成

请投票删除此帖子,以便我能找回代表 XD

【问题讨论】:

  • 您是否对 Java 的 StringBuilder.Reverse() 感到困惑? .NET 中没有这样的方法。
  • 这不是完全清楚你在追求什么 - 你想反转结果字符串,还是你想要一个包含你附加的反转的字符串?例如,如果你有sb.Append("abc"); sb.Append("xyz"),你想要"xyzabc" 还是"zyxcba"?
  • @JamesThorpe 我正在尝试将“01101”返回到“10110”

标签: c#


【解决方案1】:

你必须把它变成一个字符串,然后把它反转,把它变成一个数组,然后从中创建一个新的字符串:

return new string(sb.ToString().Reverse().ToArray());

【讨论】:

    【解决方案2】:

    我们可以编写一个extension method,它遵循与 StringBuilder 类中存在的其他方法一起使用的模式。
    我的意思是,我们可以直接在 StringBuilder 缓冲区上做相反的事情。

    public static void Reverse(this StringBuilder sb)
    {
        char t;
        int end = sb.Length - 1;
        int start = 0;
        
        while (end - start > 0)
        {
            t = sb[end];
            sb[end] = sb[start];
            sb[start] = t;
            start++;
            end--;
        }
    }
    

    现在我们只需要一行代码就可以使用扩展了

    StringBuilder sb = new StringBuilder();
    sb.Append("Testing reverse directly on the stringbuilder buffer");
    sb.Reverse();
    Console.WriteLine(sb.ToString());
    

    警告,这只是回答所发布问题的练习。我不知道它是否更有效,或者这种方法是否存在缺点。
    当然,存储字符串和数组不需要像规范方法那样分配新的内存。考虑到用户已经有了一个字符串生成器,我想这种方法可以很容易地使用。

    【讨论】:

    • 嗨,史蒂夫,您似乎忘记将您的方法命名为 public static void Reverse :)
    • 感谢@SonerGönül,新年快乐
    • 谢谢你,也祝你新年快乐。也恭喜获得 200k ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2013-08-29
    • 1970-01-01
    • 2017-06-21
    • 2011-09-27
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多