字符串替换

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


解题思路

第一种:投机取巧

直接调用已有replace方法

public class Solution {

    public String replaceSpace(StringBuffer str) {

         return str.toString().replaceAll(" " , "%20");

    }

}

 


第二种:构建新的字符串

将原有字符串放置于字符数组中

循环遍历字符数组

将原有字符串数据添加到新的字符串中

遇到空格则改变空格,把%20添加到新字符串中

public class Solution {

    public String replaceSpace(StringBuffer str) {

        //将StringBuffer转换成String类型

        String strOld = str.toString();

        //将Sring类型转换成字符数组

        char[] strOldChar = strOld.toCharArray();

        //构建新的字符串

        StringBuffer strNew = new StringBuffer();

        for(int i = 0; i < strOldChar.length;i++){

            if(strOldChar[i] == ' '){

                strNew.append("%20");

            }else{

                strNew.append(strOldChar[i]);

            }

        }

        return strNew.toString();

    }

}


第三种:原字符串替换法

从前向后记录‘ ’数目,从后向前替换‘ ’。 重点:从后向前替换的时候的技巧 例如:“we are lucky”

0  1  2  3  4  5  6  7  8  9  10  11

W e      A  r  e      L  u  c   k    y

可以得知count=2;//空格的个数。 所以在替换的时候7~11的字母要向后移动count×2个位置,3~5字母要向后移动(count-1)×2个位置。 所以得到 :

0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15

W e     A   r  e      L  u  c   k    y

W e              A  r  a                 L    u    c    k     y

在替换的时候直接在空格处写入%20了

0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15

W e     A   r  e      L  u  c   k    y

W e % 2  0  A   r  e % 2   0    L    u    c     k    y

public class Solution {

    public String replaceSpace(StringBuffer str) {

        int spacenum = 0;//spacenum为计算空格数

        for(int i=0;i=0 ;--indexold){

                if(str.charAt(indexold) == ' '){  //

                str.setCharAt(indexnew--, '0');

                str.setCharAt(indexnew--, '2');

                str.setCharAt(indexnew--, '%');

                }else{

                    str.setCharAt(indexnew--, str.charAt(indexold));

                }

        }

        return str.toString();

    }

}

 

 

 


总结:在对字符串进行操作的时候,要注意是什么类型(StringBuffer无法直接转换成字符数组)

字符串或数组做替换操作时要考虑到长度的问题,比原数据多或少的时候都要相应的增加或减少长度

为了防止下标越界等问题,一般操作为:从前往后遍历,从后往前操作

 


知识点:

Java中字符数组、String类、StringBuffer三者的相互转换

Java中的String,StringBuilder,StringBuffer三者的区别

 

你可能感兴趣的:(算法)