剑指 offer 笔记 02 | 替换空格

2019-04-13  本文已影响0人  ProudLin

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

public class Solution {
     public String replaceSpace(StringBuffer str) {
        
    }
}

这道题有应用场景的,因为在网络编程中,如果URL参数中含有特殊字符,如:空格、“#”等,可能导致服务器端无法获得正确的参数值。

我们需要将这些特殊符号转换成服务器识别的字符。转换规则是在“%”后面跟上ASCII码的两位十六进制的表。比如:空格的ASCII玛是32,即十六进制的0x20,因此空格被替换成“%20”。

题目很显然要求我们用 StringBuffer 类来解决问题,这道题目有两种解决方案

第一种就是调用 String 自带的方法 replaceAll
public class Solution {
    public String replaceSpace(StringBuffer str) {
        if(str == null){
            return null;
        }
         return str.toString().replaceAll("\\s", "%20");
    }
}

我琢磨着,面试官应该不希望看到第一种写法,想让面试者自己写一个算法,.

第二种就是调用 StringBuffer 类的方法,charAt(int index)
 public String replaceSpace(StringBuffer str) {
        if(str == null){
            return null;
        }
          for(int i = 0; i < str.length(); i++)
              {
                   if(str.charAt(i) == ' ')
                     {
                      str.replace(i, i+1, "%20");
                     }
              }
         
        return str.toString();
    }

第三种 看别人的,利用StringBuffer实现,通过 indexOf(String str,int fromIndex) 方法和 subSequence(int start,int end) 方法联合实现

    public static String replaceSpace(StringBuffer str) {
        if (str == null) {
            return null;
        }
        int fromIndex = 0;
        int index = 0;
        StringBuffer temp = new StringBuffer();
        while (index <= str.length()) {
            index = str.indexOf(" ", fromIndex);
            if (index >= 0) {
                temp.append(str.subSequence(fromIndex, index)).append("%20");
                index = index + 1;
                fromIndex = index;
            } else {
                temp.append(str.substring(fromIndex, str.length()));
                break;
            }
        }
        return temp.toString();
    }

题外话,String 、StringBuffer、StringBuilder 之间的区别,面试题也是常有的哦。

参考文献:
https://blog.csdn.net/believejava/article/details/38682361
https://www.cnblogs.com/gl-developer/p/6435058.html

上一篇 下一篇

猜你喜欢

热点阅读