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

2.思路:可能首先想到的应该就是  str.replaceAll("\\s", "%20"),在工作当中肯定可以这样写,但是如果是面试的话,主要考的是编程能力,而不是熟悉API的程度;

一种想法是在原有的字符串进行替换,但是只适用于在替换字符的长度和被替换字符长度一致时,才可以使用;

另一种想法是在 先计算替换之后字符串的长度,再新建一个字符串,用来存放替换之后的字符串,这里采用这种方式;

3.代码:

①:不使用 StringBuilder 和 StringBuffer

    public String replaceSpace(String s) {
//1.判断有多少空格
int spaceNum = 0;
for(int i = 0 ; i < s.length();i++){
if(s.charAt(i) == ' '){
spaceNum++;
}
} if(spaceNum != 0){
//2.需要的长度
int newLen = s.length() + 2 * spaceNum;
char[] newChars = new char[newLen];
int position = 0; //3.开始替换
for(int i = 0 ; i < s.length() ; i++){
if(s.charAt(i) == ' '){
newChars[position++] = '%';
newChars[position++] = '2';
newChars[position++] = '0';
}else{
newChars[position++] = s.charAt(i);
}
} s = new String(newChars);
} return s;
}

②使用 StringBuffer

    public String replaceSpace(StringBuffer str) {

        //1.判断有多少空格
int spaceNum = 0 ;
for(int i = 0 ; i < str.length();i++){
if(str.charAt(i) == ' '){
spaceNum++;
}
} if(spaceNum != 0){
//2.需要的长度
int oldLen = str.length();
int newLen = oldLen + 2 * spaceNum;
str.setLength(newLen);
int position = newLen - 1; //3.开始替换,从后往前移动,每次则只移动一个字符
for(int i = oldLen - 1 ; i >= 0 ; i-- ){
if(str.charAt(i) == ' '){
str.setCharAt(position-- , '0');
str.setCharAt(position-- , '2');
str.setCharAt(position-- , '%');
}else{
str.setCharAt(position-- , str.charAt(i));
}
}
} return str.toString();
}

③使用 StringBuilder

 public String replaceSpace(StringBuffer str) {
if(str == null){
return null;
}
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < str.length();i++){
if(str.charAt(i) == ' '){
sb.append('%');
sb.append('2');
sb.append('0');
}else{
sb.append(str.charAt(i));
}
}
return sb.toString();
}

剑指offer —— 替换空格的更多相关文章

  1. 剑指Offer 替换空格

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

  2. 剑指Offer——替换空格

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

  3. 用js刷剑指offer(替换空格)

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

  4. 剑指offer替换空格

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  5. 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串

    [算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...

  6. 剑指offer——替换字符串

    总结:先计算出总共有多少空格,count++:然后从后往前遍历,每遇到一个空格,count--:       替换空格 参与人数:2119时间限制:1秒空间限制:32768K 通过比例:20.23% ...

  7. 剑指offer 替换字符串中的空格

    void replaceSpace(char *str,int length) { ) return; ; ; ; while(str[originlen]!='\0') { if(str[origi ...

  8. 剑指Offer-2.替换空格(C++/Java)

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

  9. 剑指Offer_5_替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成"%20". 例如,当字符串为We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy. 在网络编程 ...

随机推荐

  1. altium designer 中器件原理图库中,将一个器件分成几部分是如何操作的?就是如何用part表示?

    在SCH Library的Components中选中你要添加part的器件,tools菜单--new part即可

  2. paramiko 模块封装

    #!/usr/bin/env python#coding=utf-8 import paramiko, getpass,sys,traceback class ssh_utils(): def log ...

  3. sqlplus 连接数据库执行SP

    .bashrc export HOME= export LANG="C" .bash_profile #明码 #export LOG_USER=lhcx #export LOG_P ...

  4. php get_include_path();是干嘛的、??还有set_include_path();/?????

    首先 我们来看这个全局变量:__FILE__ 它表示文件的完整路径(当然包括文件名在内) 也就是说它根据你文件所在的目录不同,有着不同的值:当然,当它用在包行文件中的时候,它的值是包含的路径: 然后: ...

  5. Python02 标准输入输出、数据类型、变量、随记数的生成、turtle模块详解

    1 标准输出 python3利用 print() 来实现标准输出 def print(self, *args, sep=' ', end='\n', file=None): # known speci ...

  6. JavaScipt——Windows.document对象

    四中选择器:class ,id , name , 标签 通过选择器获取对象: document.getElementById('');  -- id选择器 ...................... ...

  7. java内存模型和线程安全

  8. 628D Magic Numbers

    传送门 题目大意 定义n-magic为从左往右,偶数位置均为n,奇数位置不为n的一类数.求出[a,b]内所有可被m整除的d-magic个数. 分析 显然是数位dp,我们用dp[i][j][k]表示考虑 ...

  9. p2657 windy数

    传送门 分析 首先这是一个询问一段区间内的个数的问题,所以我们可以用差分的思想用sum(R)-sum(L-1).然后我们考虑如何求出sum(n),我们用dp[i][j][k][t]表示考虑到第i位,最 ...

  10. vue 之 计算属性和侦听器

    计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div> {{ message.split('').rever ...