04_替换空格

题目:实现一个函数,把字符串中的每个空格替换成”%20”。例如”I like it”,”I%20like%20it”

思路:如果直接每次遇到空格添加’%20’,那么空格后面的数字就需要频繁向后移动。遇到这种移动问题,我们可以尝试先给出最终需要的长度,然后从后向前扫描,同时给定两个指针来保证定位。

Java版本

public class replaceBlank {

    //length:最大长度        originalLength:字符串的实际长度
    public void replace(char string[],int length,int originalLength)
    {
        if(string == null || length <= 0)
        {
            return  ;
        }

        int numberOfBlank = 0;
        for(int i=0;i<originalLength;i++)
        {
            if(string[i] == ' ')
            {
                numberOfBlank++;
            }
        }
        //newLength:替换后的字符串的长度
        int newLength = originalLength + numberOfBlank * 2;

        if(newLength > length)
            return ;

        //从后往前
        int indexOfOriginal = originalLength-1;
        int indexOfNew = newLength-1;

        while(indexOfOriginal >= 0 && indexOfNew >= indexOfOriginal)
        {
            if(string[indexOfOriginal] == ' ')
            {
                string[indexOfNew--] = '0';
                string[indexOfNew--] = '2';
                string[indexOfNew--] = '%';
            }
            else
            {
                string[indexOfNew--] = string[indexOfOriginal];
            }
            indexOfOriginal--;
        }   
    }

    public static void output(String input,int max)
    {
        char[] output= new char[max];
        if(input == null)
        {
            System.out.print("字符串输入错误");
            return  ;
        }
        int originalLength = input.length();
        System.out.println("原字符串:"+ input);
        for(int i=0;i<originalLength;i++)
        {
            char ch = input.charAt(i);
            output[i] = ch;
        }

        replaceBlank a = new replaceBlank();
        a.replace(output,max,originalLength);

        System.out.print("现字符串:");
        System.out.println(output);
    }


    public static void main(String[] args) {
        int max=100;

        String str1 = "hello world";// 空格在句子中间
        output(str1,max);
        String str2 = "hello  world";// 连续有两个空格
        output(str2,max);
        String str3 = " helloworld";// 空格在句子开头
        output(str3,max);
        String str4 = " helloworld ";// 空格在句子末尾
        output(str4,max);
        String str5 = "";// 传入内容为空的字符串
        output(str5,max);
        String str6 = " ";// 传入内容为一个空格的字符串
        output(str6,max);
        String str7 = "       ";// 传入的字符串全是空格
        output(str7,max);
        String str8 = null;// 传入NULL
        output(str8,max);
    }
}

这里写图片描述

Python版本:

# -*- coding:utf-8 -*-
# Python中string 不能改变,所以要创造一个新的string来进行操作
def replace(string,length):

    if(string == None or length <= 0 or not isinstance(string,str)):
        return ""

    originalLength = len(string)

    numberOfBlank = 0
    for i in string:
        if(i == ' '):
            numberOfBlank += 1

    newLength = originalLength + numberOfBlank * 2
    if(newLength > length):
        return 

    #从后往前
    indexOfOriginal = originalLength-1
    indexOfNew = newLength-1
    newStr = newLength * [None]
    while(indexOfOriginal >= 0 and indexOfNew >= indexOfOriginal):
        if(string[indexOfOriginal] == ' '):
            newStr[indexOfNew] = '0'
            indexOfNew -= 1
            newStr[indexOfNew] = '2'
            indexOfNew -= 1
            newStr[indexOfNew] = '%'
            indexOfNew -= 1
        else:
            newStr[indexOfNew] = string[indexOfOriginal]
            indexOfNew =indexOfNew- 1

        indexOfOriginal -= 1
    return "".join(newStr)


str1 = 'hello world'  # 空格在句子中间
str2 = 'hello  world' # 连续有两个空格
str3 = ' helloworld'  # 空格在句子开头
str4 = ''             # 空字符串
str5 = ' '            # 一个空格
str6 = '       '      # 全是空格
str7 = None           # 传入None
str8 = 'None'         # 传入字符串None
print('原字符串:',str1)
print('现字符串:',replace(str1,100))
print('原字符串:',str2)
print('现字符串:',replace(str2,100))
print('原字符串:',str3)
print('现字符串:',replace(str3,100))
print('原字符串:',str4)
print('现字符串:',replace(str4,100))
print('原字符串:',str5)
print('现字符串:',replace(str5,100))
print('原字符串:',str6)
print('现字符串:',replace(str6,100))
print('原字符串:',str7)
print('现字符串:',replace(str7,100))
print('原字符串:',str8)
print('现字符串:',replace(str8,100))

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值