力扣刷题:替换字符串的空格

本文介绍了LeetCode的一道题——替换字符串的空格。解题思路是创建新字符数组,遇到空格则填充'%20',非空格则保留原字符。文中详细分析了Java中char与String的特性和自增操作,强调了基本数据类型与引用类型的区别,并提供了代码解析,指出在字符串不可变的情况下,如何通过新建数组来完成替换操作。
摘要由CSDN通过智能技术生成

题目描述

实现一个函数把字符串s的每一个空格替换成"%20"

解题代码

class Solution {
    public String replaceSpace(String s) {
        char[] str = new char[s.length()*3];
        int size = 0;
        for(int n=0;n<s.length();n++){
            if(s.charAt(n) == ' '){
                str[size++]='%';
                str[size++]='2';
                str[size++]='0';
            }else{
                str[size++]=s.charAt(n);
            }
        }
        return new String(str,0,size);
    }
}

分析

思路:新建一个字符数组,遍历字符串s,检查字符串s的每一个字符是否为空格,如果是空格,就字符数组对应的位置填上“%20”,如果不是就将原来的字符添加上去,最后返回一个字符数组得到的字符串。

这其实是一道很简单的题,简单到连我自己都怀疑自己没什么没有解出来,充分说明了自己在Java的一些基础使用上存在大量的空隙,下面逐行对代码进行解析,希望可以加深自己的记忆。

关于char与String的特性

Java中数据类型分为两类,分别是基础数据类型与引用类型,具体如下:在这里插入图片描述Java中基本数据类型都是不可变的数据类型,所以在对字符进行判等时采用的时“==”,对于引用类型采用equals()方法,在Java中,对于自定义的对象都需要覆写该方法用于判等,此处采用equals()方法会报错。

String类属于引用数据类型,为不可变的数据类型(并不是所有的应用数据类型都不可变),在初始化完成之后就无法进行修改 ,例如以下代码将会报错:

String str = "hello world";
str.charAt(1) = 'w';

由于无法在原字符串中进行修改,因此新建一个char数组,我们将原来的空格替换为“%20”,因此,数组的长度为s.length()*3,保障长度足够,在最后的字符数组转为字符串中,共有以下几种方法:

  char[] charArray = {'a','b','c','d'};
  String str = new String(charArray,0,charArray.length);
  System.out.println(str);
  
  String str1 = String.valueOf(charArray);
  System.out.println(str1);
  
  String str2 = new String(charArray);
  System.out.println(charArray);

其中,采用的是第一种转换方法,第一种转换方法中,提供的参数,包括待转换的字符数组、字符串起始位置、长度,如果采用其他两种方法,由于在定义时对数组进行了初始化,默认初始化为“\u0000”,即空格,会在最后将多余的“\u0000”转化为字符串中的字符。

自增

在代码中str[size++]='%'利用的是变量的自增特性,size++会优先将i进行其他操作,在此处,代码等于str[size]='%' size+=1,Java的自增与C相似,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值