替换字符串空格 - Java - StringBuffer

问题描述:

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

基本思路:

逆序替换,降低时间复杂度

实现方案:

  • String一旦初始化,无法改变。
  • 使用StringBuffer,是因为牛客网的模板。
  • 实际使用中,单线程建议是用StringBuilder,因其无锁,效率高。
  • 多线程中,使用StringBuffer。
  • 两者的内置函数是相同的

思考:

  • 在原有字符串上更改,还是新建字符串(原有的话,需要重新设置长度setLength())
  • 不考虑使用现有replace()

代码:

public static String replaceSpace(StringBuffer str){
		
		int length = str.length();
		int spacenum = 0;
		
		//统计空格字符个数
		for(int i=0;i<length;i++){
			if(str.charAt(i) == ' ')
				spacenum++;
		}
		
		int lengthNew = length + spacenum*2;
		str.setLength(lengthNew);
		int index = length-1;
		int indexNew = lengthNew-1;

		for(;index>=0;index--){
			
			if(str.charAt(index) == ' '){
				str.setCharAt(indexNew--, '0');
				str.setCharAt(indexNew--, '2');
				str.setCharAt(indexNew--, '%');
			}
			else{
				str.setCharAt(indexNew--, str.charAt(index));
			}
		}
		return str.toString();
	}

posted @ 2017-04-23 01:54  gleesu  阅读(4047)  评论(0编辑  收藏  举报