替换空格

https://blog.youkuaiyun.com/yiyiwudian/article/details/46659877

【题目】

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

【思路】

我们可以考虑从最终结果入手,指针从最终结果的末尾开始移动。

首先,先遍历一次字符串,统计出字符串中空格的个数,来计算替换之后字符串的总长度。(替换之后的字符串长度=原来的长度+2*空格数,这里是2*空格数,是因为原来的空格已经占有了一个长度,只需要在原来的基础上再增加两个长度就可以将%20插入进去)

然后,从字符串的后面开始复制和替换。准备两个指针,P1和P2,P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾。

P1向前移动,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止。

碰到空格之后,P1向前移动1格,在P2之前插入字符串”%20”,由于”%20”的长度为3,所以P2也要向前移动3格。

P1和P2的不断重复上述操作,直到P1和P2都指向最开头(此时所有的空格已经全部替换了)。

按照这样的思路,所有的字符都只复制(移动)了一次,由此这个算法的时间复杂度为O(n)

【代码】

    public static void main(String[] args) {

        System.out.println(replaceSpace1("we are happy"));
    } 

    //替换空格
    public static String replaceSpace(String s){
        if(s==null||s.length()==0){
            return null;
        }
        char c[]=s.toCharArray();
        StringBuilder str=new StringBuilder();
        for(int i=0;i<c.length;i++){
            if(c[i]==' '){
                str.append("%20");
            }
            else{
                str.append(c[i]);
            }
        }
        return str.toString();
    }

    public static String replaceSpace1(String str){
        if(str==null||str.length()==0){
            return null;
        }
        char[] c=str.toCharArray();
        int len1=str.length();//原字符串长度
        int numOfSpace=0;
        //统计原串空格个数
        for(int i=0;i<len1;i++){
            if(c[i]==' '){
                numOfSpace++;
            }
        }
        int len2=len1+2*numOfSpace;//新串长度
        char[] cc=new char[len2];

        //// 定义两个指针,在字符串的后面进行复制和替换  
        int index1=len1-1;
        int index2=len2-1;

        while(index1>=0 && index2>=index1){
            if(c[index1]==' '){
                cc[index2--]='0';
                cc[index2--]='2';
                cc[index2--]='%';
            }
            else{
                cc[index2--]=c[index1];
            }
            index1--;
        }

        return String.valueOf(cc);
    }
先展示下效果 https://pan.quark.cn/s/5061241daffd 在使用Apache HttpClient库发起HTTP请求的过程中,有可能遇到`HttpClient`返回`response`为`null`的现象,这通常暗示着请求未能成功执行或部分资源未能得到妥善处理。 在本文中,我们将详细研究该问题的成因以及应对策略。 我们需要掌握`HttpClient`的运作机制。 `HttpClient`是一个功能强大的Java库,用于发送HTTP请求并接收响应。 它提供了丰富的API,能够处理多种HTTP方法(例如GET、POST等),支持重试机制、连接池管理以及自定义请求头等特性。 然而,一旦`response`对象为`null`,可能涉及以下几种情形:1. **连接故障**:网络连接未成功建立或在请求期间中断。 需要检查网络配置,确保服务器地址准确且可访问。 2. **超时配置**:若请求超时,`HttpClient`可能不会返回`response`。 应检查连接和读取超时设置,并根据实际需求进行适当调整。 3. **服务器故障**:服务器可能返回了错误状态码(如500内部服务器错误),`HttpClient`无法解析该响应。 建议查看服务器日志以获取更多详细信息。 4. **资源管理**:在某些情况下,如果请求的响应实体未被正确关闭,可能导致连接被提前释放,进而使后续的`response`对象为`null`。 在使用`HttpClient 3.x`版本时,必须手动调用`HttpMethod.releaseConnection()`来释放连接。 而在`HttpClient 4.x`及以上版本中,推荐采用`EntityUtils.consumeQuietly(respons...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值