package com.example.algorithm.findnumber;
/**
* 将一个字符串中的空格替换成"%20"
*
* @author tengxiang
* @date 2020/5/14
* @since 1.0
*/
public class ReplaceBlank4 {
/**
* 解法一:使用StringBuffer
* @param str
* @return
*/
public static String replaceBlank(String str){
if(str == null){
return null;
}
StringBuffer s = new StringBuffer();
for(int i = 0 ; i < str.length() ; i++){
if(str.charAt(i) == ' '){
s.append("%20");
}else{
s.append(str.charAt(i));
}
}
return s.toString();
}
/**
* 解法二:使用StringBuilder
* @param str
* @return
*/
public static String replaceBlank2(String str){
if(str == null){
return null;
}
StringBuilder s = new StringBuilder();
for(int i = 0 ; i < str.length() ; i++){
if(" ".equals(String.valueOf(str.charAt(i)))){
s.append("%20");
}else{
s.append(str.charAt(i));
}
}
return new String(s);
}
/**
* 解法三:从后往前复制
* @param str
* @return
*/
public static String replaceBlank3(String str){
if(str == null){
return null;
}
int length = str.length();
//统计空格数
int blankNum = 0;
for(int i = 0; i < length ; i++){
if(str.charAt(i) == ' '){
blankNum++;
}
}
int newLength = length + blankNum * 2;
char[] newStr = new char[newLength];
int index = newLength - 1;
for(int i = length - 1 ; i >= 0 ; i--){
if(str.charAt(i) == ' '){
newStr[index--] = '0';
newStr[index--] = '2';
newStr[index--] = '%';
}else{
newStr[index--] = str.charAt(i);
}
}
return new String(newStr);
}
public static void main(String[] args) {
System.out.println(replaceBlank3("a b c "));
}
}