Oferta de Sword Finger 05. Cinco formas de reemplazar espacios

Oferta de Jian Zhi 05. Reemplazar espacios

Implemente una función para reemplazar cada espacio en la cadena s por "% 20".

Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
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!

Supongo que te gusta

Origin blog.csdn.net/weixin_46801232/article/details/108692915
Recomendado
Clasificación