替换字符串中的空格《算法很美》

替换字符串中的空格

思路: 有两种方法,一种是直接调用javaApi的形式替换字符串中的空格,另外一种是自己写,思路:先遍历字符串,用count来记录空格变换成%20后的长度,然后设定两个指针p1,p2进行调换。

具体思路:

  1. ”Mr John Smith0000000000000000000000“
  2. 将字符串转成字符数组"Mr John Smith0000000000000000000000".toCharArray()
  3. 遍历iniString[]数组,根据’ '来增加count的长度。
  4. 原本count长度为 int count = length;(13) 此时count的长度为17
  5. 设定p1 = length-1(12); p2 = count-1(16)
  6. while(p1>=0) 遍历p1
  7. Mr John Smith | Mr John Smith0000000000000000000000
  8. 从后面开始判断,如果是字符就往后移动,如果是空格就在后面加上%20,干完一件事都要p1–。 记得是在16的位置
  9. Mr John Smith000h000000000000000000
  10. Mr John Smith00th000000000000000000
  11. Mr John Smith0ith000000000000000000
  12. Mr John Smithmith000000000000000000
  13. Mr John SmitSmith000000000000000000
  14. Mr John S%20Smith000000000000000000
  15. Mr John n%20Smith000000000000000000
  16. Mr Johnhn%20Smith000000000000000000
  17. Mr Johohn%20Smith000000000000000000
  18. Mr JoJohn%20Smith000000000000000000
  19. Mr%20John%20Smith000000000000000000
  20. 最后截取0~count的长度即可
/*
 请编写一个方法,将字符串中的空格全部替换为"%20",假定该字符串有足够的空间存放新增的字符
 并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。
 给定一个string iniString 为原始的串,以及串的长度 int len,返回替换后的string。
 测试样例:
 "Mr John Smith",13
 返回:"Mr%20John%20Smith"
 "Hello World",12
 返回:"Hello%20%20World"
*
* */
public class 替换字符串中的空格 {
    public static void main(String[] args){
        System.out.println(replaceSpace("Mr John Smith0000000000000000000000".toCharArray(),13));
    }
    public static String replaceSpace(String iniString, int length){
        return iniString.replaceAll("\\s","%20");
    }
    public static String replaceSpace(char[] iniString, int length) {
        int count = length;
        for (int i = 0; i < length; i++) {
            if (iniString[i]==' '){
                count+=2;
            }
        }
        int p1 = length-1;
        int p2 = count-1;
        while(p1>=0){
            if (iniString[p1]==' '){
                iniString[p2--]='0';
                iniString[p2--]='2';
                iniString[p2--]='%';
            }else {
                iniString[p2--]=iniString[p1];
            }
            p1--;
        }
        return new String(iniString,0,count);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值