1、思路概述:
首先,我们拿到这道题要考虑的是如果要在当前的数组上将空格替换,那么必定会溢出。所以我们采用了以下几种方法
把空格数先计算出来,然后对数组进行扩容,再在数组尾部定义一个指针从尾部开始后移(不用再将每个字符串向后覆盖了),然后遇到空格用20%替换,结束;
但是上面的方法虽然看起来简单但是要对数组遍历两边,影响了程序的时间复杂度;
优解:因为此处是单线程,所以用StringBulider类对字符串进行存储,append方法添加20%;StringBudlidr是一个长度可变的字符序列,完美的解决了题目中的要求,并且在单线程情况下比StringBuffer的效率要高。
2、代码实现:
public static void replace(String string){
StringBuilder stringBuilder=new StringBuilder();
for(int i=0;i<string.length();i++){
if(String.valueOf(string.charAt(i)).equals(" ")){
stringBuilder.append("##");
}else {
stringBuilder.append(string.charAt(i));
}
}
System.out.println(stringBuilder);
}
public static void main(String[] args) {
String str="i am a student";
// System.out.println(str);
replace(str);
}