剑指offer-3(替换空格)
题目:
实现一个方法,把一个字符数组里面的空格全部替换为“20%”。
思路:
首先呢,要先获取字符数组中有多少个空格以及字符数组中字符的长度,计算出替换后的长度;然后,让一个虚拟指针indexOfNew指想新长度大小的那个下标位置,让另一个虚拟指针indexOfOriginal指向原字符长度大小的那个下表位置,判断indexOfOriginal下表位置的是不是为空格,如果是,indexOfNew下表位置以及前面两个位置依次放入0,2,%;indexOfOriginal前移。继续判断;如果不是空格,直接把indexOfOriginal处的字符放到indexOfNew下表位置。
代码:
public class Test04 { /* * length为字符数组的总容量 */ public static void replaceBlank(char[] string,int length){ if(string ==null || length<1){ return; } int originalLength = 0;//字符的实际长度 int blankLength = 0;//空格的个数 int i = 0; while(i < length && string[i] != '\u0000'){ ++originalLength; if(string[i]==' '){ ++blankLength; } i++; } //新的长度为字符长度加上空格个数乘以2,本来是20%三个字符,因为还要去一个空格,相当于每遇到一个空格,长度就需要增加两个 int newLength = originalLength + blankLength * 2; if(newLength > length) return; int indexOfOriginal = originalLength; int indexOfNew = newLength; while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){ if(string[indexOfOriginal] == ' '){ string[indexOfNew--] = '0'; string[indexOfNew--] = '2'; string[indexOfNew--] = '%'; }else{ string[indexOfNew--] = string[indexOfOriginal]; } --indexOfOriginal; } for (int j = 0;j<newLength;j++) { System.out.print(string[j]); } } public static void main(String[] args) { char[] str = new char[20]; str[0] = 'h'; str[1] = 'e'; str[2] = 'l'; str[3] = 'l'; str[4] = 'o'; str[5] = ' '; str[6] = 'w'; str[7] = ' '; replaceBlank(str,str.length); } }