【剑指offer】替换空格 -- Java 实现

替换空格

https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423?answerType=1&f=discussion

【剑指offer】替换空格 -- Java 实现

1. 调用自带函数

public class Solution {
    public String replaceSpace(StringBuffer str) {
        return str.toString().replace(" ", "%20");
    }
}

2. 用新的数组存

1. 分析:

当遇到 " ",就追加 "%20",否则遇到什么追加什么

import java.util.*;
public class Solution {
    public String replaceSpace(StringBuffer str) {
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<str.length();i++){
            char c = str.charAt(i);
            if(c == ' '){
                sb.append("%20");
            }else{
                sb.append(c);
            }
        }
        return sb.toString();
    }
}
全部评论
因为你return的是string呀,你要用一个新的String变量接收replace后的再返回
1 回复 分享
发布于 2019-10-15 18:05
你这个代码还可以再优化,遇到空格追加,使用stringbuilder,底层的实现是会执行多次resize操作。因此在数据量大的情况下,性能会降低下来。 //设置计算游标         int isr = 0;         //执行一次N的遍历         for (int i = 0; i < origionChars.length; i++) {             if (origionChars[i] == ' ') {                 isr++;             }         }         //最后的新数组的大小         int newCapacity = origionChars.length + (isr * specifiedChars.length);         char[] newChars = new char[newCapacity];         for (int i = 0, j = 0; i < newCapacity && j < origionChars.length; i++) {             if (origionChars[j] == ' ') {                 for (int t = 0; t < specifiedChars.length; t++) {                     newChars[i++] = specifiedChars[t];                 }                 j++;                 continue;             }             //正常迁移             newChars[i] = origionChars[j++];         }         return new String(newChars); 通过这种方式,只执行一次的resize,在1百万长度的字符下,效率提高两倍+!
10 回复 分享
发布于 2019-09-16 19:42
 public  String replaceSpace(StringBuffer str) {         String string = str.toString();         string.replace(" ","%20");         return  string;     } 楼主 想问下 为什么这样的不行
点赞 回复 分享
发布于 2019-09-24 08:55
我也想问一下二楼的问题,即使用新的变量接收也不可以,因为replace替换的是字符而不是字符串,所以为什么可以这样替换呢?
点赞 回复 分享
发布于 2020-02-22 15:16
replace可以替换字符串的呀 public String replace(CharSequence target, CharSequence replacement) { …… } public final class String implements java.io.Serializable, Comparable<string>, CharSequence { }</string>
点赞 回复 分享
发布于 2021-02-12 17:20

相关推荐

在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
110 3 评论
分享
牛客网
牛客企业服务