格式化文本(代码),删除空格和内容

时间:2016-11-19 23:49:46

标签: c#

我想这样做,所以无论你是否使用100个空格等,每个代码总是看起来一样。

所以例如

Example: lwz r4,-0x0018(rtoc)

这是代码的外观,下面是如何输入代码的示例。

lwz   r4,   -0x0018     (rtoc)
lwz       r4,-0x0018(rtoc)
lwz r4,-0x0018   (rtoc)

还有其他代码,但我认为一般规则是。

(周围没有空间","。"周围没有空间"("和")")。

由于这将通过线路多次循环,因此该方法最好应该非常快。

我不反对使用不安全的代码等:)

谢谢!

编辑:

代码也可以是:" fmul f0,f1,f2"同样适用于那里。

我试过的是将它看作指针(不安全)。 但是,虽然我可以替换角色,但我不能说出来。 我想我必须做没有指针,但我仍然不知道如何找出循环的规则,即使我有点抓住它。 (ifs等格式)。

EDIT2:

这是我似乎已经开始工作的当前Messy代码。

    private string FormatCode(string text)
    {

        int length = text.Length;

        char last = '.';

        for (int i = 0; i < text.Length; i++)
        {
            char c = text[i];

            if (c == ' ' && last == ',')
            {
                text = text.Remove(i, 1);
                i--;
            }
            else if (c == ',' && last == ' ')
            {
                text = text.Remove(i-1, 1);
                i--;
            }
            else if(c=='(' && last == ' ')
            {
                text = text.Remove(i - 1, 1);
                i--;
            }
            else if(c == ' ' && last == ')')
            {
                text = text.Remove(i, 1);
                i--;
            }
            else if (c == ' ' && last == ' ')
            {
                text = text.Remove(i, 1);
                i--;
            }

            last = c;

        }

        return text;
    }

1 个答案:

答案 0 :(得分:2)

var a = "lwz   r4,   -0x0018     (rtoc)";
var b = string.Join(" ", a.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries))
    .Replace(" ,", ",").Replace(", ", ",")
    .Replace(" (", "(").Replace("( ", "(")
    .Replace(" )", ")").Replace(") ", ")");

此变体更快但更长:

var a = "lwz   r4,   -0x0018     ( rtoc )";
StringBuilder sb = new StringBuilder(a.Length);
var spaceFound = false;
var ignoreSpaces = true;
for (int i = 0; i < a.Length; i++)
    if (a[i] == ' ')
        spaceFound = true;
    else if (a[i] == '(' || a[i] == ')' || a[i] == ',')
    {
        sb.Append(a[i]);
        ignoreSpaces = true;
    }
    else
    {
        if (spaceFound && !ignoreSpaces)
            sb.Append(' ');
        sb.Append(a[i]);
        spaceFound = false;
        ignoreSpaces = false;
    }
var b = sb.ToString();