标签:return Offer StringBuffer 空格 字符串 str 对答如流 Java
面试题4:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。
在网络编程中,如果URL参数中含有特殊字符,如空格、'#'等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在'%'后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成"%20"。再比如'#'的ASCII码为35,即十六进制的0x23,它在URL中被替换为"%23"。
工欲善其事必先利其器,Java在字符串方面提供非常多的API,供我们使用,极大方便了我们对字符串的操作。
不过就这道题而言,解法还是比较简单的。
解法一
新建字符串,遍历原字符串,当发现空格时,在新字符串添加%20,否则添加原字符串中的数据,不改变原数据。这个是非常传统的解法。对Java的API最直观的运用。不过在解法二中,会进行代码量上的优化(实际上是选择了更好用的API)
public String replaceSpace(StringBuffer str) {
if (str == null) {
return null;
}
StringBuffer newStr = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == (' ')) {
newStr.append('%');
newStr.append('2');
newStr.append('0');
} else {
newStr.append(str.charAt(i));
}
}
return newStr.toString();
}
解法二
遍历字符串,当发现空格时,替换空格,改变原数据
public String replaceSpace(StringBuffer str) {
if (str == null) {
return null;
}
int i = 0, j;
while (i < str.length()) {
if ((j = str.indexOf(" ")) != -1) {
str.replace(j, j + 1, "%20");
i += 2;
}
i++;
}
return str.toString();
}
如果你对String比较熟悉,看过相关的源码,建议看一下StringBuffer和StringBuilder的源码。
做工程成长最快的方式就是阅读,学习优秀的代码。
解法三
直接把StringBuffer转换成String调用replaceAll方法,改变原数据。
这部分是Java正则表达式的运用。如果你懂正则表达式,那么字符串处理方面,你将有了一个非常大的优势。
public String replaceSpace_2(StringBuffer str) {
if (str == null) {
return null;
}
return str.toString().replaceAll(" ", "%20");
}
上面这道字符串的题是非常简单的,并没有牵扯到复杂的算法。这道题就重在提醒大家,要熟练掌握Java常用的API,同时,在字符串方面,建议好好学习一下Java的正则表达式,我认为“正则表达式”的运用这项技能还是很有必要的,其次有些第三方依赖,如commons-lang3对已有的Java字符串相关的API再一次进行封装,简化我们的处理,阅读它的源码将对你很有帮助,除此之外,还有String、StringBuffer以及StringBuilder的源码级认识也是不可缺少的。
本篇文章内容虽简单,但是我想传达给你的,你Get了吗?
标签:return,Offer,StringBuffer,空格,字符串,str,对答如流,Java 来源: https://www.cnblogs.com/JefferyChenXiao/p/12246249.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。