1 问题场景
编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的"真实"长度。
注意:字符串长度在 [0, 500000] 范围内。
2 答案
2.1 解决方案一
直接使用String方法解决
public static String replaceSpaces(String S, int length) {
if(S.length()>500000||S.length()<0){
return "字符长度超出合理范围";
}
S = S.substring(0,length).replace(" ","%20");
return S;
}
进行测试:
package com.example.demo;
public class Solution {
public static void main(String[] args) {
System.out.println(replaceSpaces(" ",5));
}
public static String replaceSpaces(String S, int length) {
if(S.length()>500000||S.length()<0){
return "字符长度超出合理范围";
}
S = S.substring(0,length).replace(" ","%20");
return S;
}
}
2.2 解决方案二
package com.example.demo;
public class Solution {
public static void main(String[] args) {
System.out.println(replaceSpaces(" ",5));
}
public static String replaceSpaces(String S, int trueLength) {
if(S.length()>500000||S.length()<0){
return "字符长度超出合理范围";
}
char[] str = S.toCharArray();
int spaceCount = 0, index, i = 0;
// 计算空格的数量
for (i = 0; i < trueLength; i++) {
if (str[i] == ' ') {
spaceCount++;
}
}
// 计算替换后的字符串长度
index = trueLength + spaceCount * 2;
// 计算替换后的字符串长度
index = trueLength + spaceCount * 2;
// 从后向前操作,进行替换
if (trueLength < str.length) str[trueLength] = '\0'; // 标记实际结束位置
for (i = trueLength - 1; i >= 0; i--) {
if (str[i] == ' ') {
str[index - 1] = '0';
str[index - 2] = '2';
str[index - 3] = '%';
index = index - 3;
} else {
str[index - 1] = str[i];
index--;
}
}
return new String(str);
}
}