【剑指offer】 字符串替换

博客围绕将字符串中的空格替换成“%20”展开。介绍了两种实现方法,一是生成新对象进行append操作,通过start和end确定子串,根据是否为空格决定append时机;二是不生成新对象,统计空格数、重新赋值字符串长度,从尾部赋值以减少移位、提升效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

1、
为了减少插入时字符串的移位消耗,可生成一个对象去进行append操作,而不是在原来字符串进行插入操作;
为了减少不必要的append,可以通过start和end确定要进行append的子串,通过判断是否为空格进行append的时机;

public static String replaceSpace(StringBuffer str) {
    StringBuffer stringBuffer=new StringBuffer();
    int start=0;
    int end=0;
    int lenght=str.length();
    while (end<lenght){
        //计算从何处开始append,减少append次数
        if (str.charAt(end)!=' '){
            end++;
        }else {//当char 等于空格时开始替换
            stringBuffer.append(str.substring(start,end)).append("%20");
            end++;
            start=end;
        }
    }
    stringBuffer.append(str.substring(start,end));//最后一次,将末尾start,end的子串插入
    return stringBuffer.toString();
}

2、 不新生成对象,采用统计空格数,重新赋值字符串长度,然后采用从尾部赋值的操作方式,减少移位,提升效率。

 public static String replaceSpace2(StringBuffer str) {
    int count=0;
    int oldlen=str.length();
   for (int i=0;i<oldlen;i++){//计算空格数
       if (str.charAt(i)==' ')
           count++;
   }
   int newlen=oldlen+count*2; //计算新字符串长度
   str.setLength(newlen);
    for (int i=oldlen-1;i>=0;i--){//从尾开始进行赋值操作,避免从头部操作时的char的移位
        char data=str.charAt(i);
        if (data!=' '){//如果不等于空格则直接赋值
            str.setCharAt(--newlen,data);
        }
        else {//如果等于空格,则赋值%20
            str.setCharAt(--newlen,'0');
            str.setCharAt(--newlen,'2');
            str.setCharAt(--newlen,'%');
        }
    }
    return str.toString();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值