Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/09/2011, 19:41
Avatar de zero0097
zero0097
 
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 6 meses
Puntos: 69
Respuesta: Limpiar una String quitandole caracteres deseados

Vuelvo con el mismo problema, la solucion planteada arriba funciona pero no en todos los casos, ademas al profe no le gusto como se implemento porque para efectos prácticos no me servira al identificar lexemas, operadores, numeros, etc....

Si me pueden ayudar se los agradesco ahora cambio un poco la jugada:

Se lee de un archivo lo siguiente (nótese los saltos de linea):
Cita:
Esto*es #$% una p%ru&eba
ho{}[email protected]
si" _gnos
87.88dell76
Y la salida en pantalla deberá ser la siguiente (incluyendo saltos de linea):
Cita:
Esto
es
una
p
ru
eba
ho
la
you
com
si
gnos
87
88
dell
76
Hasta ahora no tengo problema en quitar los simbolos pues lo hago con la solucion de arriba, pero el problema viene cuando tengo que validar numeros que tienen entre sí letras y que no puedo desechar ni el texto ni el numero, en si en la linea: 88dell87 no la puedo separar alguna idea?

les dejo mi código para que vean masomenos como voy (tratando la linea leida):
Código PHP:
//limpio la linea de simbolos no deseados sustituyendo por espacios para separar la linea en palabras despues
linea linea.trim().replaceAll("[^A-Za-z_0-9]"" ");

//separo la linea por palabras y se almacenan en un arreglo
String [] palabras linea.split(" ");
        
        
//recorro el arreglo de las palabras, para analizar una por una
        
for(int i=0i<palabras.lengthi++) {
            
//no me sirven lineas vacías asi que las filtro
            
if(palabras[i].length() > 0) {
                
//asigno el valor palabra para manejarlo mas comodamente
                
String palabra palabras[i].trim();
                
                
//validar la palabra usando el metodo para eso y que me devuelve String
                
palabra this.validaPalabra(palabra);
                
                
//nuevamente quitar lineas blancas posiblemente generadas
                
if(palabra.length() > 0) {
                    
//finalmente escribir en pantalla la palabra
                    
System.out.print(palabra);
                }                
            }            
        } 
Este es el método que valida la palabra para que queden palabras que empiecen con letra y puedan tener numeros y guines bajos o que empiecen con numeros y tengan solo numeros:


Código PHP:
//Método que valida la palabra
private String validaPalabra(String palabra) {
        
//Una variable para almacenar lo que regresaré
        
String resp "";
        
        
//un contador
        
int i 0;
        
//Identifico el primer caracter de la cadena si es letra entra aqui
        
if(Character.isLetter(palabra.charAt(i))) {
            
//como la primer caracter es letra por fuerza entra al while puesto que el valor de "i" no ha cambiado
            
while(palabra.length() && (Character.isLetterOrDigit(palabra.charAt(i)) || Character.toString(palabra.charAt(i)).equals("_"))) {
                
//si coincide con que es letra, numero o un guion bajo es valido y concatena
                
resp += palabra.charAt(i);
                
                
//e incremento el contador
                
i++;
            }            
        }
        
//Identifico el primer caracter de la cadena si es número entra aqui
        
else if(Character.isDigit(palabra.charAt(i))) {
            
//como el primer caracter es numero entrará al while porque el valor de i no ha cambiado aún
            
while(palabra.length() && Character.isDigit(palabra.charAt(i))) {
                
//si el caracter en posicion i es numero concatena....pero y si se encuentra una letra entre los numeros? ejem 23rex32
                
resp += palabra.charAt(i);
                
i++;
            }
            
//el programa saldrá del while al encontrar una letra despues de un numero y ahora tengo que leer la cadena con letra
            //y la de los numeros y retornar ambas con un salto de linea, pero no se ni como hacerlo?
        
}
        
        
//regreso la palabra validada, mas que nada regreso las que inician con letra porque los numeros con letras enmedio no se validan puesto que no se como
        
return resp;
    } 
Más que nada mi problema es de lógica y pues no se como hacerle, alguna sugerencia por favor?

Ha y claro hasta ahora con ese codigo que tengo la salida es la siguiente:
Cita:
Esto
es
una
p
ru
eba
ho
la
you
com
si
87
88
Si se fijan me faltan gnos, dell y 72


PD: Cabe aclarar que debe ser capaz de leer cualquier archivo no especificamente esas lineas, osea si se encuentra mas simbolos en otro orden pegados separados debe de filtrar el contenido. De antemano muchas gracias por su ayuda.

Saludos!