刷题(剑指offer02)
替换空格
题目:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
分析1:
题目所给的函数的参数为stringbuffer类型,考察的是对字符串的相关内容的了解程度。因此,需要对字符类型进行系统的复习。
Java字符串主要包含 String类和StringBuffer类和Stringbuilder类,关于2个类型的差别主要是
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
(一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞)。
另外字符串的一些常用操作如下:(其操作函数如下):
1.获取字符串中的第i个字符方法charAt(i)
2.获取指定位置的字符方法getChars(4个参数)
str.getChars(indexBegin,indexEnd,array,arrayBegin);
3.字符串的比较函数
int result = str1.compareTo(str2);
int result = str1.compareToIgnoreCase(str2);
boolean result = str1.equals(str2);
boolean result = str1.equalsIgnoreCase(str2);
4.相互转换
转化为其他类型:
Integer.parseInt(str)
转换为字符串类型:
String.valueOf([int] i)
Int.toString([int] i)
5.字符串查找
indexOf()方法
lastIndexOf()方法
6.字符串截取与拆分
截取substring()方法 :
格式1:String result = str.substring(index);
格式2:String result = str.substring(beginIndex,EndIndex);
拆分split()方法:
格式1 :String strArray[] = str.split(正则表达式);
格式2:String strArray[] = str.split(正则表达式,limit);
本题的解题思路有2:
1:直接调用Java的字符串替代函数:replace函数
样例为:
public static void main(String[] args) {
System.out.println("hello$".replaceAll("$",""));
System.out.println("hello$".replace("$",""));
System.out.println("hello$".replaceAll("\\$",""));
}
输出结果如下:
hello$
hello
hello
replace对应的是普通字符串,replaceAll对应的是正则表达式。
所以本题可通过代码如下解决:
public class Solution {
public String replaceSpace(StringBuffer str) {
return str.toString().replace(" ", "%20");
}
}
同理可以通过如下代码:
public class Solution {
public String replaceSpace(StringBuffer str) {
int n = str.length();
for(int i=0; i<n; i++) {
//charAt函数是字符串使用比较频繁的api。
if(str.charAt(i) == ' ') {
n += 2;
str.replace(i, i+1, "%20");
}
}
return str.toString();
}
}
特别需要注意的是+符号=符号一定要使用英文符号,不然的话,会一直显示编译不通过的。