标签:
由于最近在学习Head First Java,所以最先考虑到的就是使用字符串拼凑,思路很简单,没有考虑什么时间复杂度,直接看代码。
1 public class Solution { 2 public String replaceSpace(StringBuffer str) { 3 String str1=str.toString(); 4 char[] charArray = str1.toCharArray(); 5 StringBuilder sBuilder = new StringBuilder(); 6 for (char c : charArray) { 7 if(c==‘ ‘) { 8 sBuilder.append("%20"); 9 }else { 10 sBuilder.append(c); 11 } 12 } 13 String string = sBuilder.toString(); 14 return string; 15 } 16 }
思路:从字符串的后面开始复制和替换,首先准备两个指针,p1和p2,p1指向原始字符串的末尾,p2指向替换后字符串的末尾,接下来,向前移动指针p1,逐个把它指向的字符复制到p2,碰到一个空格之后,把p1向前移动1格,在p2处插入字符串“20%”,由于“20%”长度为3,同时也要把p2向前移动3格。直到p1=p2,表明所有空格都已经替换完毕。
1 public class ReplaceSpace { 2 3 public static void main(String[] args) { 4 Scanner scanner = new Scanner(System.in); 5 String str=scanner.nextLine(); 6 scanner.close(); 7 char[] charArray = str.toCharArray(); 8 int length=charArray.length; 9 int spaceNumber=0;//获取空格数量 10 for (char c : charArray) { 11 if(c==‘ ‘) { 12 spaceNumber++; 13 } 14 } 15 int newLength=length+spaceNumber*2; 16 char[] tempArray=new char[newLength];//新的数组的长度 17 System.arraycopy(charArray, 0, tempArray, 0, length);//将原来的数组拷贝到新长度的数组中 18 int indexofOriginal = length - 1; 19 int indexofNew = newLength - 1; 20 while (indexofOriginal>=0&&indexofOriginal!=indexofNew) { 21 if (tempArray[indexofOriginal]==‘ ‘) { 22 tempArray[indexofNew--] = ‘0‘; 23 tempArray[indexofNew--] = ‘2‘; 24 tempArray[indexofNew--] = ‘%‘; 25 }else { 26 tempArray[indexofNew--] = tempArray[indexofOriginal]; 27 } 28 indexofOriginal--; 29 30 } 31 for (char c : tempArray) { 32 System.out.print(c); 33 } 34 } 35 36 }
标签:
原文地址:http://www.cnblogs.com/wangjiangwu/p/5782309.html