首页 > 技术文章 > Java 替换空格

wangjiangwu 2016-08-17 23:09 原文

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

解一:

由于最近在学习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 }

 

 


推荐阅读