entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Buscar y Reemplazar palabra en java

Tengo esta parte del codigo, ya tengo la parte donde busca en un archivo txt una palabra pero yo necesito que la reemplace, alguien me puede ayudar, se lo agradeceré mucho.

Dejo mi codigo


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class PruebaDeBuscarDentroDeUnArchivo {
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        // TODO code application logic here
        @SuppressWarnings("resource")
        java.util.Scanner scanner = new Scanner(System.in);
        try {
            final BufferedReader reader = new BufferedReader(
                new FileReader("C:\\Users\\pc\\Desktop\\proyecto1\\test1.txt")
            );
            ///////////////aqui vamos a probar
            String line = "";   
            while((line = reader.readLine())!= null) {
            String valor2="cambialo";
            String cadenaDondeBuscar = "[K";
            String cadenaDondeBuscar2 = "[0m";

                if (line.contains(cadenaDondeBuscar)) {

                    String prueba = cadenaDondeBuscar.replace(cadenaDondeBuscar, valor2);
                    System.out.println("Se encontro la palabra "+ cadenaDondeBuscar);
                    System.out.println(prueba);
                }

                if (line.contains(cadenaDondeBuscar2)) {

                    String prueba2 = cadenaDondeBuscar2.replace(cadenaDondeBuscar2, valor2);
                    System.out.println("Se encontro la palabra "+ cadenaDondeBuscar2);
                    System.out.println(prueba2);
                }

            }

            reader.close();
        } catch (FileNotFoundException e) {e.printStackTrace();
        } catch (IOException           e) {e.printStackTrace();}
    }
}

Desde ya muchas gracias

1 Respuesta

2votos

magarzon Puntos22090

Hola.

Casi lo tenías, solo te faltó escribir los cambios sobre el fichero.

Curiosamente el otro día hubo una pregunta parecida pero para hacerlo en PHP: https://entredesarrolladores.com/16720/aumentar-el-valor-una-columna-dentro-archivo-csv-usando-php

Aunque en ese caso en la solución utilizada se leía y escribía en el fichero simultáneamente (algo que también se puede hace en Java con la clase RandomAccessFile, pero tienes que tener en cuenta codificación de las cadenas, cadenas reemplazadas que ocupan diferente tamaño en bytes... un rollo), la mejor solución en Java es la que tú has propuesto, y a la que le falta como te decía el remate final.

Este sería un código que funciona (he borrado algunas cosas de tu código y he utilizado nombre en inglés para todas las variables, porque o todo en inglés- preferible-, o todo en español, pero nada de mezclar).
Básicamente lo que se hace es leer todo el fichero, utilizar replaceAll para reemplazar en todo el contenido, y luego volver a escribir el fichero entero.

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.io.FileWriter;

public class PruebaDeBuscarDentroDeUnArchivo {
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        // TODO code application logic here
        @SuppressWarnings("resource")
        java.util.Scanner scanner = new Scanner(System.in);
        try {
            final BufferedReader reader = new BufferedReader(
                new FileReader("C:\\Users\\pc\\Desktop\\proyecto1\\test1.txt")
            );

            String line = "", content = "";   
            while((line = reader.readLine())!= null) {
                content += line + "\r\n";
            }

            reader.close();

            String replacement="cambialo";
            String needle = "[K";

            String newContent = content.replaceAll(needle, replacement);

            FileWriter writer = new FileWriter("test.txt");

            writer.write(newContent);

            writer.close();
        } catch (FileNotFoundException e) {e.printStackTrace();
        } catch (IOException           e) {e.printStackTrace();}
    }
}

rach comentado Oct 19

hola muchas gracias por tu ayuda si me funciona, sin embargo solo tomaste una palabra en este codigo y yo necesito que me cambie mas de una, estoy viendo como hacerlo de todos modos te agradezco por ayudarme. en cuanto vea como hacerlo con mas de una palabra regreso

Saludos

magarzon comentado Oct 19

Aplica consecutivamente el replaceAll con cada palabra.

Imagina que tienes la lista de reemplazos en un mapa, del tipo buscar => reemplazar, donde la clave del mapa son los términos a buscar, y el valor sería su reemplazo. Luego solo tienes que recorrer el mapa como un array e ir aplicando cada substitución con replaceAll

rach comentado Oct 19

disculpa, no eh trabajado con nada de esto que comentas, voy a buscar información y seguir intentando, si tienes algún ejemplo me ayudarías mucho para aclarar mis ideas, mientras sigo buscando y de nuevo gracias por la ayuda

rach comentado Oct 19

Map<Integer, String> datos = new HashMap<Integer, String>();
            datos.put(1, "[K");
            datos.put(2, "[0");
            datos.put(3, "tres");

            for (Map.Entry<Integer, String> entry : datos.entrySet()) {
                String replacement="1";
                String needle= entry.getValue();
                //System.out.println(needle);
                String newContent = content.replace(needle, replacement);
                System.out.println(newContent);

            }

no se que estoy haciendo mal que no lo cambia :( pero si recorre el array

rach comentado Oct 19

ya vi que pasa lo reemplaza pero como si hiciera duplicado del txt,:S ayuda por favor

magarzon comentado Oct 19

No entiendo muy bien cuál es tu problema ahora, pero el código que has pegado no es a lo que me refería. En el mapa, las claves tendrían que ser las palabras a reemplazar, no 1, 2 y 3, y los valores serían por qué otras palabras quieres que se reemplace.

rach comentado Oct 19

La verdad voy empezando con java, pero ya pude resolver mi problema, lo dejo por si alguien mas lo ocupa

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.io.FileWriter;

public class PruebaDeBuscarDentroDeUnArchivo {
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        // TODO code application logic here
        @SuppressWarnings("resource")
        java.util.Scanner scanner = new Scanner(System.in);
        try {
            final BufferedReader reader = new BufferedReader(
                new FileReader("C:\\Users\\pc\\Desktop\\proyecto1\\test1.txt")
            );

            String line = "", content = "";   
            while((line = reader.readLine())!= null) {
                content += line + "\r\n";
            }

            reader.close();

            String replacement="cambialo";
            String needle = "[K";
            String needle2 = "[L";
**
            String newContent = content.replace(needle, 
            replacement).replace(needle2.replacement);**  con esto se soluciono

            FileWriter writer = new FileWriter("test.txt");

            writer.write(newContent);

            writer.close();
        } catch (FileNotFoundException e) {e.printStackTrace();
        } catch (IOException           e) {e.printStackTrace();}
    }
}

muchas gracias por tu ayuda, me fue muy util, mil gracias
Saludos

magarzon comentado Oct 19

Cuidado, con replace solo reemplazas la primera ocurrencia de [K o [L, si solo tienes una por fichero, bien, pero si quieres reemplazar todas tienes que usar replaceAll

rach comentado Oct 19

ya lo probé muchas gracias y si me funciona así como lo puse y cambia todo

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta