Java 替换空格

题目描述

请实现一个函数,将一个字符串中的空格替换成“%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 }

 


时间: 2024-12-20 02:14:30

Java 替换空格的相关文章

Pro4 替换空格(java)

注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 1 /* 2 * 剑指offer 替换空格 3 * xsf 4 * */ 5 6 /*开始替换空格的函数,length为原数组的长度,java中length不计算/0*/ 7 class BlankFun{ 8 public String replaceBank(String str) { 9 if(str==null)//输入安全判断 10 return null; 11 //构建一个新的Str

java实现——004替换空格

1.创建新的字符串 1 public class T004 { 2 public static void main(String[] args){ 3 System.out.println(replaceBlank("we are happy")); 4 } 5 public static String replaceBlank(String s){ 6 String r = "%20"; 7 String result = ""; 8 for(

【剑指offer】第四题 替换空格

/** * 剑指offer 第4题 替换空格 * 特点:1.先扫描串中的空格数,计算好替换后的长度 * 2.使用双指针,从后面开始向前替换,避免从前开始每次替换后就要移动后面的所有的数据 * 测试用例:特殊:有多个空格 * 错误:数组长度不够,字符串为空 * */ package javaTrain; public class Offer4 { public static void main(String[] args) { String a = "Hello I am Daisy Dong!&

替换空格 4

先遍历每个字符统计空格数 :String.charAt() ? ? 根据空格数计算新的长度 :newLength=oriLength+2*NumOfBlank ? ? 新建一个newLength长度的字符数组tempChars用于存放替换空格之后的字符数组 ? ? 利用System.arraycopy函数将原字符串转换为数组拷贝到新的字符数组tempChars中 ? ? 从新字符数组末尾开始遍历,用一个index1指向新字符数组末尾,用一个index2指向原字符数组末尾所在新字符数组的位置,将原

Pro4 替换空格

本题最大的困难是如何在不新建新的数组下完成空格替换,主要考察数组指针的运用 思路:(1)找出字符串空格的长度,从而确定新的子串尾指针的位置所在: (2)通过遍历找出空格,string[indexOfNew--]依次附上%20三个字符,indexOfOriginal-- 注:并没有通过实际指针而是通过字符串下标操作,起始时均指向末尾位置 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 /

【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”

//字符串替换空格:实现一个函数,把字符串里的空格替换成"%20" #include <stdio.h> #include <assert.h> void replace(char *src) { assert(src); int OldLen = 0; //原字符串长度 int NewLen = 0; //新字符串长度 int BlackNum = 0; //空格数量 int NewBack = 0; //新字符串尾部 int OldBack = 0; //原

【c语言】字符串替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”

// 字符串替换空格:请实现一个函数,把字符串中的每个空格替换成"%20". // 例如输入"we are happy.",则输出"we%20are%20happy." #include <stdio.h> #include <assert.h> char* replace(char* p) { char* ret = p; int num = 0; int oldlen = 0; int newlen = 0; char

剑指Offers 题目1510:替换空格

题目1510:替换空格 题解报告:  水题,注意数据,我是用最简单的办法,一扫而替换,判断的时候注意,s[i]!=0,全局数组初始化默认为0,我开始用了strlen(s)判断,超了不少时,哎呀! #include <stdio.h> #include <stdlib.h> #include <string.h> char s[10000001]; int main() { while(gets(s)){ for(int i=0; s[i]!=0; i++){ if(s[

替换空格--《剑指offer》

如题所示,题目很简单,替换空格,将字符串中的空格替换为%20: 即"we are happy"替换成"we%20are%20happy": 如果每当我们遇到一个空格就将字符串向后平移两位,这样复杂度就是O(n2)了,这样的方法是不可取的,按照作者的来说,offer已不足拿到了: 而当我们反向从字符串末尾开始遍历,复杂度仅为O(n),当然前提的是该字符串有足够空间,否则替换会失败. 了解到思想之后程序也就比较简单了,发现自己的与作者的写的也比较类似,就此贴上了...