目:实现一个函数,把字符串中的每个空格替换成"20%".例如,输入"We are happy.",则输出为"We%20are%20happy."。
思路1:根据java特性,可以利用StringBuilder()和StringBuffer();
2:从后往前复制。
**注意:**如果从前往后复制会重复复制(移动)数字或字符多次,可以考虑从后往前复制。
/**
* @author: zjay
* @version: 1.0
* @date: 2021/8/10
*
* 题目:实现一个函数,把字符串中的每个空格替换成"20%".例如,输入"We are happy.",
* 则输出为"We%20are%20happy."。
* 思路1:根据java特性,可以利用StringBuilder()和StringBuffer();
* 2:从后往前复制。
*/
public class Test5_ReplaceBlank {
public static void main(String[] args) {
String str = "We are happy.";
String result_str = replaceBlank2(str);
System.out.println(result_str);
}
// 方法1:StringBuilder/StringBuffer
public static String replaceBlank1(String str) {
// 合理性判断
if(str == null) {
return null;
}
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i<str.length(); i++) {
if(str.charAt(i) == ' ') {
stringBuilder.append("%20");
} else {
stringBuilder.append(str.charAt(i));
}
}
return String.valueOf(stringBuilder);
}
// 方法2:从后往前复制
public static String replaceBlank2(String str) {
//int len = 0; // 新字符数组的长度
int num_blank = 0; // str中空格数目
int index = 0; // 字符数组索引
//统计str中空格的数目
for(int i = 0; i<str.length(); i++) {
if(str.charAt(i) == ' ') {
num_blank++;
}
}
//%20替换空格,所以需要额外长度为 2 * num_blank
char[] chars = new char[str.length() + 2 * num_blank];
//从后往前复制
index = chars.length - 1;
for(int i = str.length() - 1; i >= 0; i--) {
if(str.charAt(i) == ' ') {
chars[index--] = '0'; //使用后--来移动index
chars[index--] = '2';
chars[index--] = '%';
} else {
chars[index--] = str.charAt(i);
}
}
return String.valueOf(chars);
}
}