题目描述
实现一个函数把字符串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相似,
本文介绍了LeetCode的一道题——替换字符串的空格。解题思路是创建新字符数组,遇到空格则填充'%20',非空格则保留原字符。文中详细分析了Java中char与String的特性和自增操作,强调了基本数据类型与引用类型的区别,并提供了代码解析,指出在字符串不可变的情况下,如何通过新建数组来完成替换操作。
510

被折叠的 条评论
为什么被折叠?



