CI1.4 字符串空格替换
来源:互联网 发布:滨州大数据产业园 编辑:程序博客网 时间:2024/06/07 10:23
题目描述
编写一个方法,将字符串中的空格全部替换为”20%”。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的”真实长度”。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
解法
处理字符串操作问题时,常见做法是从字符串尾部开始编辑,从后往前反向操作。这种做法很有用,因为字符串尾部有额外的缓冲,可以直接修改,不必担心会覆盖原有数据。
我们将采用上面这种做法。该算法会进行两次扫描。第一次扫描先数出字符串中有多少空格,从而算出最终的字符有多长。第二次扫描菜真正反向编辑字符串。检测到空格则将%20复制到下一个位置,若不是空白,就复制原先的字符。
public class Main { public static void main(String[] args) { String s = "qwerz sdfht lo2 1234 "; char[] c = s.toCharArray(); int length = c.length; char[] chr = new char[1000]; for (int i = 0; i < c.length; i++) { chr[i] = c[i]; } replaceSpaces(chr, length); for (char t : chr) { System.out.print(t); } } public static void replaceSpaces(char[] str, int length) { // 特别注意此处的length指的是字符串真实的长度 int i, newLength, spaceCount = 0; for (i = 0; i < length; i++) { if (str[i] == ' ') { spaceCount++; } } newLength = length + 2 * spaceCount; str[newLength] = '\0'; // 节约空间用 for (i = length - 1; i >= 0; i--) { if (str[i] == ' ') { str[newLength - 1] = '0'; str[newLength - 2] = '2'; str[newLength - 3] = '%'; newLength = newLength - 3; } else { str[newLength - 1] = str[i]; newLength--; } } }}
注:Java字符串不可变,此题选用字符数组解决这个问题(自始至终都在足够大的数组中)
上面的是程序员面试金典里的方法,不知道使用StringBuffer合不合要求
public class Main { public static void main(String[] args) { String s = "qwerz sdfht lo2 1234 "; System.out.println(replaceSpaces(s)); } public static String replaceSpaces(String str) { StringBuffer sb = new StringBuffer(); for(int i = 0; i < str.length(); i++){ if(str.charAt(i) == ' '){ sb.append("%20"); continue; } sb.append(str.charAt(i)); } return sb.toString(); }}
结果是一样的。。。
0 0
- CI1.4 字符串空格替换
- 替换字符串中的空格4
- 【字符串】字符串替换空格
- 4+替换字符串中的所有空格
- 面试题4:替换字符串中的空格
- 剑指offer 4题 【字符串】替换空格
- 面试题4:字符串_空格替换
- 替换字符串中的空格
- 字符串替换空格
- 替换字符串中的空格
- 替换字符串中的空格
- 替换字符串中的空格
- 替换字符串中的空格
- 替换字符串中的空格
- 字符串中的替换空格
- 替换字符串中空格
- 替换字符串中的空格
- 字符串中的空格替换
- org.apache.commons.lang.StringUtils方法讲解
- OpenGL编程指南6:顶点数组
- poj 2606 Rabbit hunt
- oracle数据库创建表空间,创建用户,给用户授权
- js 跨域问题解决方案
- CI1.4 字符串空格替换
- Android绕过usb主机permision确认对话框framework修改方案
- [Leetcode] Binary Tree Level Order Traversal & Binary Tree Zigzag Level Order Traversal
- JZOJ5006. A
- Spring 注解
- 射频识别技术漫谈(11)——Mifare系列卡的共性
- dragger2的入门基础
- 扫雷实用帖:HBase读延迟的12种优化套
- JS内置对象