Foros del Web » Programación para mayores de 30 ;) » Java »

Borrar palabras que no inician con @

Estas en el tema de Borrar palabras que no inician con @ en el foro de Java en Foros del Web. Hola buen día: De antemano muchas gracias por su tiempo y apoyo. Necesito de su apoyo para hacer una función en java que cuando reciba ...
  #1 (permalink)  
Antiguo 26/05/2014, 10:28
 
Fecha de Ingreso: julio-2012
Mensajes: 18
Antigüedad: 11 años, 9 meses
Puntos: 0
Exclamación Borrar palabras que no inician con @

Hola buen día:

De antemano muchas gracias por su tiempo y apoyo.

Necesito de su apoyo para hacer una función en java que cuando reciba una línea como esta: "esto es para @pepe @ivan @hi saludos" solo me deje las palabras que inician con @.
quedando así "@pepe, @ivan, @hi

Tengo el siguiente código

String linea = "esto es para @pepe @ivan @hi saludos";


int i,j,aux=0;

for(i=0;i<linea.length();i++)
{
if(linea.charAt(i)=='@')
{
if(i==0)
aux=1;
else
{if(linea.charAt(i-1)==' ')
aux=1;
}
}
if(aux==1)
{if(linea.charAt(i)!=' ')
System.out.print(linea.charAt(i));
else
{aux=0; System.out.println(' ');}
}
}


}

pero el resultado que me arroja no es el que deseo:

el resultado me lo da así:

@pepe
@ivan
@hi

y yo lo necesito así: @pepe, @Ivan, @hi
además esta salida debe ser un string no arreglo.

Les agradezco su apoyo y atención

Saludos, excelente día.
  #2 (permalink)  
Antiguo 27/05/2014, 00:22
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Borrar palabras que no inician con @

Buenos días,

yo no lo habría hecho así, para no complicarme habría hecho lo siguiente:

Código Java:
Ver original
  1. String linea = "esto es para @pepe @ivan @hi saludos";
  2.         String[] palabras = linea.split(" ");
  3.         List<String> palabrasConArroba = new ArrayList<String>();
  4.         int j=0;
  5.         for(int i=0;i<palabras.length;i++){
  6.             if(palabras[i].charAt(0)=='@'){
  7.                 palabrasConArroba.add(palabras[i]);
  8.                 j++;
  9.             }
  10.         }
  11.        
  12.         System.out.println(palabrasConArroba);

Con el método .split creo un array con las distintas palabras del String separandolas mediante el espacio " ". Esto me genera un array que contiene:

[esto,es,para,@pepe,@ivan,@hi,saludos]

Recorro ese array y para cada posición compruebo si empieza por el carácter '@' en caso de que así sea añado esa palabra a una lista de Strings.

Ya tengo entonces en una lista las palabras que empiezan por '@'.

[@pepe, @ivan, @hi]

Si lo que necesitas es un String, simplemente recorres la lista y generas el String que necesites.

Un saludo.
  #3 (permalink)  
Antiguo 27/05/2014, 14:19
 
Fecha de Ingreso: julio-2012
Mensajes: 18
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Borrar palabras que no inician con @

rgf1987, de antemano te agradezco mucho de tu apoyo, funciono excelente es más eficiente tu función.

Solo una molestia más. ¿Cómo podría eliminar los [ ] que me dan como resultado.

Esto es lo que me devuelve:

[@yo, @ivan, @pepe]

Como quitarle los [] para que quede así:

@yo, @ivan, @pepe

De nuevo muchas gracias, saludos!!!
  #4 (permalink)  
Antiguo 27/05/2014, 15:50
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Borrar palabras que no inician con @

El resultado te lo imprime así porque el toString por defecto de la lista añade los parentesis por defecto.

Para quitarlos tienes que formar tu el String recorriendo la lista:

Código Java:
Ver original
  1. String res="";
  2. for(String palabra:palabrasConArroba){
  3.      res+=palabra + " ";
  4. }
  5. System.out.println(res);

Un saludo.
  #5 (permalink)  
Antiguo 27/05/2014, 17:35
 
Fecha de Ingreso: julio-2012
Mensajes: 18
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Borrar palabras que no inician con @

rgf1987, perfecto muchísimas gracias de antemano, pero ahora solo hay algo que al ejecutarlo varias veces me manda ese error:

java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)

Muchas gracias por tu apoyo en verdad.

Saludos
  #6 (permalink)  
Antiguo 28/05/2014, 00:13
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Borrar palabras que no inician con @

Ese error se debe a que en algún momento estas intentando acceder a una posición del String superior al tamaño del mismo.

Por ejemplo si tienes:

h o l a
0 1 2 3

si intentas accedes a una posición mayor que 3, se producirá ese error, porque esa posición no existe.

Verifica donde se produce el error y controlalo.

Un saludo.
  #7 (permalink)  
Antiguo 28/05/2014, 11:43
 
Fecha de Ingreso: julio-2012
Mensajes: 18
Antigüedad: 11 años, 9 meses
Puntos: 0
Mensaje Respuesta: Borrar palabras que no inician con @

Hola nuevo:

he intentado de la siguiente manera y no consigo aun evitar el error:
Código:
int size;
size = palabras.length;

int j=0;

   for(int i=0;i<palabras.length;i++){

         if (size<1)
           {

                   if(palabras[i].charAt(0)=='@')
                  {

                               palabrasConArroba.add(palabras[i]);

                               j++;

                    }
           }

        }
   System.out.println(palabrasConArroba);
[
De antemano nuevamente gracias!!
  #8 (permalink)  
Antiguo 28/05/2014, 12:55
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Borrar palabras que no inician con @

Hola

Para agregar a la respuesta del compañero, también puede utilizar el método startWith() de la clase String.

Por ejemplo:

Código Java:
Ver original
  1. private List<String> soloArrobas(String sentencia){
  2.  
  3.        List<String> lista = new ArrayList<String>();
  4.        String [] palabras = sentencia.split(" ");
  5.        for (String pala : palabras){
  6.              if (pala.startWith('@'))
  7.                      lista.add(pala);
  8.        }
  9.  
  10.       return lista;
  11.  
  12. }

Lo escribo sin compilarlo por si acaso no funcionara, pero en términos de función creo que esta bien hecho.

Saludos.
  #9 (permalink)  
Antiguo 28/05/2014, 16:27
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Borrar palabras que no inician con @

Cita:
Iniciado por rhapsodyred Ver Mensaje
Hola nuevo:

he intentado de la siguiente manera y no consigo aun evitar el error:
Código:
int size;
size = palabras.length;
int j=0;
   for(int i=0;i<palabras.length;i++){
         if (size<1)
           {
                   if(palabras[i].charAt(0)=='@')
                  {
                               palabrasConArroba.add(palabras[i]);
                               j++;
                    }
           }
        }
   System.out.println(palabrasConArroba);
[
De antemano nuevamente gracias!!
Date cuenta que haces mal la comprobación.
El error te da porque intentas acceder a la posición 0, que no existe, de un String.
Este caso se da si tienes por ejemplo esta cadena " @aa".
Al utilizar .split el resultado que te dará es [,@aa].
Cuando recorres el array [,@aa] intentas acceder a laposicion 0 de una cadena vacía, por lo tanto se genera error.

tienes que comprobar que la palabra que lees en el array sea de una lontitud mayor que 0.

Código Java:
Ver original
  1. int j=0;
  2.         for(int i=0;i<palabras.length;i++){
  3.             if(palabras[i].length()>0){
  4.                 if(palabras[i].charAt(0)=='@'){
  5.                     palabrasConArroba.add(palabras[i]);
  6.                     j++;
  7.                 }
  8.             }
  9.            
  10.         }

Última edición por rgf1987; 29/05/2014 a las 01:21

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:36.