Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Distorsion en 30 Octubre 2007, 17:08 pm



Título: Lecturas en java.
Publicado por: Distorsion en 30 Octubre 2007, 17:08 pm
Hola buenas, ay una cosa que me lleva de cabeza con la lectura de caracter a caracter en java. Estoy haciendo una especie de buscador de dos caracteres(las secuencias a encontrar se solapan), intento detectar si el usuario teclea solo un enter sin escribir nada y intento ir refrescando el valor de las variables con nuevos caracteres k se supone que el usuario a de ir introduciendo, pero me lee solo la primera secuencia introducida. No se si me explico. Aqui esta el codigo:


Código
  1. import java.io.*;              
  2. public class Buscador {        
  3. public static void main(String[] args) throws Exception {
  4. int codiASCII;
  5. char troba1 = (char)0, troba2 = (char) 0, caracter1 = (char) 0, caracter2 = (char)0;
  6. int contador = 0;
  7. int frases = 0;
  8.  
  9.  
  10.  
  11. InputStreamReader entrada = new InputStreamReader(System.in);    
  12. BufferedReader teclado = new BufferedReader(entrada);          
  13. BufferedReader teclado2 = new BufferedReader(entrada);
  14. BufferedReader teclado3 = new BufferedReader(entrada);
  15.  
  16. while(troba1==(char)0){
  17. System.out.print("Introduce el primer caracter a encontrar: ");
  18. codiASCII= teclado.read();
  19. if (codiASCII != 13){
  20. if(codiASCII < 97){
  21. troba1 = (char) (codiASCII + 32);
  22. }
  23. else{
  24. troba1 = (char) codiASCII;
  25. }
  26. }
  27. }
  28.  
  29. System.out.print(troba1);
  30.  
  31. while(troba2==(char)0){
  32. System.out.print("\nIntroduce el segundo caracter a encontrar: ");
  33. codiASCII = teclado2.read();
  34. if (codiASCII != 13){
  35. if(codiASCII < 97){
  36. troba2 = (char) (codiASCII + 32);
  37. }
  38. else{
  39. troba2 = (char) codiASCII;
  40. }
  41. }
  42. }
  43.  
  44. System.out.print(troba2);
  45.  
  46. System.out.print("\nIntroduce el texto: ");
  47. codiASCII= teclado3.read();
  48. while (codiASCII != 13){
  49. if(codiASCII < 97){
  50. caracter2 = (char) (codiASCII + 32);
  51. }else{
  52. caracter2 = (char) codiASCII;
  53. }
  54. System.out.print(caracter2 + "\n");
  55. if (caracter1 == troba1 & caracter2 == troba2)
  56. contador = contador +1;
  57.  
  58. if ((caracter2=='.') | (caracter2 =='?') | (caracter2=='!'))
  59. frases = frases +1;
  60.  
  61. caracter1 = caracter2;
  62. codiASCII= teclado.read();
  63. }
  64. System.out.print(caracter1 + "\n" + caracter2);
  65. System.out.print("Numero de las secuencias encontradas: "+contador);
  66. System.out.print("Numero de frases: "+ frases);
  67. }
  68. }

Gracias por la ayuda.


Título: Re: Lecturas en java.
Publicado por: Casidiablo en 30 Octubre 2007, 17:50 pm
Pues la verdad no entiendo lo que quieres hacer :(

P.d. Trata de usar las etiquetas de código.


Título: Re: Lecturas en java.
Publicado por: Distorsion en 30 Octubre 2007, 22:19 pm
Siento no haber sido mas claro. No importa ya lo e solucionado, he reexo todo el codigo Hay me estaba complicando la vida innecesariamente.


Título: Re: Lecturas en java.
Publicado por: Distorsion en 30 Octubre 2007, 22:29 pm
En este caxo de codigo:  datos= teclado.readLine(); si el usuario introduce un enter sin nada escrito da error. Como podria hacer que se repitiera la peticion de escritura de teclado asta que el usuario deje de escribir solo un enter?¿ Vamos que si da error vuelva a pedir la escritura.
saludos!


Título: Re: Lecturas en java.
Publicado por: Casidiablo en 31 Octubre 2007, 19:04 pm
Algo como:

Código
  1. do
  2. {
  3.    datos= teclado.readLine();
  4. }
  5. while(comprobar si no escribio nada);


Título: Re: Lecturas en java.
Publicado por: Distorsion en 1 Noviembre 2007, 17:02 pm
XD si eso del while facil pero el problema que tengo es en la comprobacion XD, nose como comprobarlo, ademas solo con el readline el programa acaba con error si el usuario solo a introducido un enter, asi que que abria que controlar el error.
Gracias por contestar.


Título: Re: Lecturas en java.
Publicado por: Casidiablo en 2 Noviembre 2007, 16:37 pm
Algo como esto:

Código
  1. import java.io.*;              
  2. public class Buscador {        
  3. public static void main(String[] args) throws Exception {
  4. int codiASCII;
  5. char caracter = (char)0;
  6. InputStreamReader entrada = new InputStreamReader(System.in);    
  7. BufferedReader teclado = new BufferedReader(entrada);          
  8.  
  9. System.out.print("Digite un caracter: ");
  10. do
  11. {
  12. codiASCII= teclado.read();
  13. }while(codiASCII==10 || codiASCII==13 );
  14. caracter = (char)codiASCII;
  15. System.out.print("El ascii es: "+ codiASCII + " y el caracter "+ caracter);
  16. }
  17. }

Un saludo!


Título: Re: Lecturas en java.
Publicado por: bestcid en 2 Noviembre 2007, 20:05 pm
quizá leyendo en lugar de con .read usado un Integer.parseInt readLine() ?

así siempre lees sólo el numero (en este caso el codigo ascii) que te interesa sin tener caracteres de retorno de carro en el bufferedreader