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

Ocurrencia de un caracter en una cadena de texto

Estas en el tema de Ocurrencia de un caracter en una cadena de texto en el foro de Java en Foros del Web. ¿Hay alguna función que devuelva el nº de ocurrencias de un carácter en una cadena de texto? Gracias y un saludo...
  #1 (permalink)  
Antiguo 09/01/2006, 11:04
 
Fecha de Ingreso: enero-2002
Ubicación: Graná
Mensajes: 646
Antigüedad: 22 años, 4 meses
Puntos: 0
Ocurrencia de un caracter en una cadena de texto

¿Hay alguna función que devuelva el nº de ocurrencias de un carácter en una cadena de texto? Gracias y un saludo
  #2 (permalink)  
Antiguo 09/01/2006, 12:12
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Pues no... tienes que implementarla tú, es bien sencillo. Aquí te pongo como lo haría yo:

int cantidad(String cadena, char caracter) {
if (cadena.equals("")) {
return 0;
} else if (cadena.charAt(0) != caracter) {
cadena = cadena.substring(1, cadena.length());
return cantidad(cadena, caracter) + 0;
}
cadena = cadena.substring(1, cadena.length());
return cantidad(cadena, caracter) + 1;
}

Espero que eso ayude
__________________
El último TipdaR

Última edición por Tipdar; 09/01/2006 a las 19:40
  #3 (permalink)  
Antiguo 10/01/2006, 01:27
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Así estás creando subcadenas que luego tendrá que limpiar el GC.

¿Por que no hacer simplemente un bucle hasta length()-1 comprobando si cadena.charAt(i)==caracter?
  #4 (permalink)  
Antiguo 10/01/2006, 03:15
 
Fecha de Ingreso: agosto-2005
Mensajes: 142
Antigüedad: 18 años, 8 meses
Puntos: 0
Podrias utilizar el metodo de la clase String indexOf que devuelve la posición donde se encuentra el String o caracter dentro de una cadena de texto y en caso de no encontrar retorna un -1.

String texto="En un lugar de la Cimeria de cuyo nombre no quiero acordame, existia un barbaro enorme dispuesto a pisar con sus sandalias los enjoyados trobnos de la tierra"


int ini=0;

int num=texto.indexOf("a",0);

while (num!=-1){
ini=ini+1;
num=texto.indexOf("a",num);

}

return ini; // Las veces que hemos encontrado la letra a.

Espero que te sirve de ayuda.
  #5 (permalink)  
Antiguo 10/01/2006, 07:12
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Lo que pasa es que he tenido muy malos recuerdos con los bucles y desde entonces... todo recursivo
__________________
El último TipdaR
  #6 (permalink)  
Antiguo 10/01/2006, 07:22
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Pues si, así parece más eficiente, ya que te saltas trozos. Aunque todo depende de lo eficiente que sea indexOf.

Un saludo
  #7 (permalink)  
Antiguo 10/01/2006, 08:00
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
He hecho unas cuantas pruebas a ver la implementacion más eficiente.... y el resultado es.... que uses el que te sea más claro, ya que los optimizadores del compilador hacen cosas ciertamente curiosas, jejeje.

Además que por ejemplo, con un String > 2K, el tiempo de proceso ronda los 18 microsegundos!!

Como anecdota, decir que la implementacion más eficiente en tiempo que he probado es, sorprendetemente, esta:

String test ="...";
char[] losChars = test.toCharArray();
int num = 0;
for (int i = 0; i < losChars.length; i++)
{
if (losChars[i] == 'a')
{
num++;
}
}

La idea del por que es que no usa apenas funciones y se limita a llamadas básicas. Cosas curiosas sobre compiladores
  #8 (permalink)  
Antiguo 10/01/2006, 08:13
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
GreenEyed, hay miles de implementaciones para cada cosa; como he dicho antes prefiero hacer las cosas recursivamente, aunque, como bien dices, consuma más recursos y probablemente el Garbage Collector tenga más trabajo. Dicen los que saben que iterar es de sabios... pero que recursar es divino. De cualquier manera, gracias por tu post. De ahora en adelante comprobaré mejor mis algoritmos...

See you around
__________________
El último TipdaR
  #9 (permalink)  
Antiguo 10/01/2006, 09:59
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Estoy muy de acuerdo en que la recursividad en muchos casos es mas elegante, pero para casos tan sencillos como estos, quizá sea más complejo que una solución simple. Aparte de que en Java si que es importante no darle trabajo extra el GC alegremente, que luego le cuesta.

Pero vamos, que es correcto y que en muchos casos no habrá mucha diferencia. Yo como estoy más orientado a programas de larga duración donde gestionar la memoria es más crítico... pues se me ve el plumero, jejeje. Deformación profesional .
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 16:33.