Buen dia.
El programa que intento hacer es la lectura de un archivo txt. el programa le pregunta que sub palabra desa buscar dentro del archivo. busca las coincidencias y cambia la palabra o sub palabra buscada por mayuscula.
El programa lee el txt, encuentra las coincidencias pero al escribir el archivo para cambiar a mayuscula las coincidencias encontradas me sale error. Espero me ayuden. Dejo el codeigo para que miren. Que otro codigo proponen?
GRACIAS
public class metodos extends main {
public static String patron="";
static Scanner leer = new Scanner(System.in);
public static void leerTxt() throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader("src\\cadena.txt"));
String texto = "";
System.out.println("¿ Que cadena desea buscar ?");
patron = leer.next();
try {
while(( texto=bufferedReader.readLine())!=null){
System.out.println(texto);
System.out.println("buscando....");
Pattern regex = Pattern.compile(patron);
Matcher match = regex.matcher(texto);
int count=0;
while(match.find()){
count ++; //Recorremos el archivo linea a linea e imprimimos
System.out.println("Encontrado "+match.group() ); // las coincidencias.
}
System.out.println("se encontraron "+count+" coincidencias");
}
} catch (FileNotFoundException e) {e.printStackTrace();
}
File f =new File("src\\cadenadena.txt");
FileWriter fw=new FileWriter(f);
BufferedWriter bw=new BufferedWriter(fw);
bw.write(texto.replaceAll(patron, patron.toUpperCase()));
}
}
texto : guarda las lineas del archivo y las imprime.
patron : es la palabra o subpalabra que va a buscar.
La salida que arroja el programa es el siguiente:
Leyendo Texto...
¿ Que cadena desea buscar ?
i
..........Lectura del archivo.............
Encontrado i
Encontrado i
.
.
.
se encontraron 28 coincidencias
Exception in thread "main" java.lang.NullPointerException
at leertxt.metodos.leerTxt(metodos.java:36)
at leertxt.main.main(main.java:10)
la linea 36 de esta clase es :
bw.write(texto.replaceAll(patron, patron.toUpperCase()));
la linea 10 del main.java es :
metodos.leerTxt();
Es un poco tarde, pero bueno:
Utilizas: texto.replaceAll
Y arriba tienes:
while(( texto=bufferedReader.readLine())!=null)
Por tanto, texto va a ser null cuando salga del bucle.