有没有比String.Replace更好的方法从字符串中删除退格?

esa*_*sac 11 c# string

我有一个字符串从另一个源读取,如"\ b\bfoo\bx".在这种情况下,它将转换为单词"fox",因为前2个\ b被忽略,最后的"o"被删除,然后被替换为"x".另外一种情况是"patt\b\b\b\b\b\b\b\b\b\bfoo"应翻译为"foo"

我用String.Replace提出了一些东西,但它很复杂,我担心它不能正常工作,它也创建了许多我想避免的新字符串对象.

有任何想法吗?

Rob*_*son 12

可能最简单的是迭代整个字符串.鉴于您的输入,以下代码在1遍中完成

public string ReplaceBackspace(string hasBackspace)
{
    if( string.IsNullOrEmpty(hasBackspace) )
        return hasBackspace;

    StringBuilder result = new StringBuilder(hasBackspace.Length);
    foreach (char c in hasBackspace)
    {
        if (c == '\b')
        {
            if (result.Length > 0)
                result.Length--;
        }
        else
        {
            result.Append(c);
        }
    }
    return result.ToString();
}
Run Code Online (Sandbox Code Playgroud)


And*_*kov 6

我这样做的方式是低技术,但很容易理解.

创建一堆字符.然后从头到尾遍历字符串.如果字符是普通字符(非斜杠),则将其推入堆栈.如果它是斜杠,并且下一个字符是'b',则弹出堆栈的顶部.如果堆栈为空,请忽略它.

最后,依次弹出每个字符,将其添加到StringBuilder,并反转结果.