Oferta de Jian Zhi 05. Reemplazar espacios
Implemente una función para reemplazar cada espacio en la cadena s por "% 20".
Método 1: utilizar StingBuffer
public static String replaceSpace(String s) {
//new StringBulider(速度快,线程不安全)或者StringBuffer填充
StringBuilder sb = new StringBuilder();
char[] arry = s.toCharArray();
for (int j = 0; j < arry.length; j++) {
if (arry[j] == ' ') {
sb.append("%20");
} else sb.append(arry[j]);
}
// 同String.valueOf(sb);
return sb.toString();
}
1. Convierta los datos de tipo String en una matriz de tipo char,
2. Utilice StingBuffer para crear una nueva matriz modificable
3. Recorra la matriz uno por uno, inserte caracteres que no sean espacios directamente e inserte caracteres que sean espacios con% 20
4. Finalmente Convertir datos a tipo de cadena
Método 2: use la API directamente
public static String replaceSpaceTwo(String s) {
String value = s.replaceAll(" ","%20");
return value;
}
El uso de reemplazar debería convertir un solo carácter, pero cambiar replaceAll por replace también puede producir el mismo resultado.
Método 3: Insertar en orden inverso
1. Primero, recorra la cadena y registre el número de espacios, y cree un carácter con longitud + número de espacios * 2 Matriz
2. Atraviese la cadena desde atrás
3. Si el carácter no es un espacio, insértelo como el carácter original, preste atención al número de la posición de inserción -1
3. Si el carácter es un espacio, inserte% 20 uno por uno, y cada carácter -1
public static String replaceSpaceThree(String s){
int count = 0;
int oldlen = s.length() - 1;
// 旧数组长度-1,表示最后一个数的下标
char[] sArry = s.toCharArray();
for(int i =0; i < s.length(); i++){
if(sArry[i] == ' '){
count ++;
}
}
char[] value = new char[(s.length() + count *2)];
// 新的数组长度-1,表示最后一个数的下标
int newlen = value.length-1;
for(int j = oldlen; j >= 0;j--){
if(sArry[j] == ' '){
value[newlen--] = '0';
value[newlen--] = '2';
value[newlen--] = '%';
}
else{
//--是先赋值后再-1
value[newlen--] = sArry[j];
}
}
return String.valueOf(value);
}
Nota: Inserte en orden inverso, por lo que% 20 de la posición de inserción debe convertirse en 02%
La idea no es difícil, la primera idea del blogger fue insertar en un orden posterior, y luego pensó que la longitud de la nueva matriz estaba determinada, ¿por qué no insertarla en un orden positivo? Resulta que siempre que se usen dos variables para controlar el subíndice al insertar la matriz, se puede lograr. El blogger usó primero un subíndice para controlar los nuevos subíndices de matriz +1 y +2, ¡pero es difícil determinar el subíndice asignado a j cuando no hay espacio en la secuencia subsiguiente! ¡No hay mucho que decir aquí!
Método 4: inserción de secuencia positiva
public static String replaceSpaceFour(String s){
int count = 0;
int oldlen = s.length() - 1;
// 旧数组长度-1,表示最后一个数的下标
char[] sArry = s.toCharArray();
for(int i =0; i < s.length(); i++){
if(sArry[i] == ' '){
count ++;
}
}
char[] value = new char[(s.length() + count *2)];
// 新的数组下标从0开始
int newlen = 0;
for(int j = 0; j <= oldlen;j++){
if(sArry[j] == ' '){
value[newlen++] = '%';
value[newlen++] = '2';
value[newlen++] = '0';
}
else{
//--是先赋值后再-1
value[newlen++] = sArry[j];
}
}
return String.valueOf(value);
}
La organización de estos dos métodos desperdicia mucho tiempo, porque la oferta oficial de Jianzhi es el siguiente método. Primero, se abre un espacio de 3 veces la longitud, y luego se inserta una por una, y finalmente se emite el primer bit de tamaño utilizado. Personalmente, siento que se desperdició mucho espacio durante el primer desarrollo, así que he estado pensando en la escritura anterior, ¡es un ejemplo que se puede aprender!
Método 5: Espada se refiere a ofrecer
class Solution {
public String replaceSpace(String s) {
int length = s.length();
char[] array = new char[length * 3];
int size = 0;
for (int i = 0; i < length; i++) {
char c = s.charAt(i);
if (c == ' ') {
array[size++] = '%';
array[size++] = '2';
array[size++] = '0';
} else {
array[size++] = c;
}
}
String newStr = new String(array, 0, size);
return newStr;
}
}
De hecho, observando todo el proceso, no hay diferencia, ¡solo la diferencia en la longitud de la matriz al principio!