将空格替换成 %20

关于字符串操作的问题,有一个普适的方法,从后往前来处理字符串。因为我们往往会开一个足够大的缓冲区去放置替换后的字符串,从后往前遍历操作,不用考虑正在被操作的字符被覆盖。

我们需要扫描两次字符串。第一次的目的是统计有多少个空格,这样我们就能确定替换之后的字符串的长度了;第二次从后往前,将空格替换成 %20,如果是非空格字符,我们直接拷贝原始的字符就好了。

使用 C# 来模拟操作这个字符串:

public static string ReplaceSpaces(string s)
{
    int spaceCount = 0;
    int newLength;
    for (int i = 0; i < s.Length; i++)
    {
        if (s[i] == ' ')
        {
            spaceCount++;
        }
    }

    newLength = s.Length + 2 * spaceCount;
    char[] newString = new char[newLength];
    for (int i = s.Length - 1; i >= 0; i--)
    {
        if (s[i] == ' ')
        {
            newString[newLength - 1] = '0';
            newString[newLength - 2] = '2';
            newString[newLength - 3] = '%';
            newLength -= 3;
        }
        else
        {
            newString[newLength - 1] = s[i];
            newLength--;
        }
    }

    return new string(newString);
}