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

Cadena1 contiene cadena2

Estas en el tema de Cadena1 contiene cadena2 en el foro de Java en Foros del Web. Hola, quiero hacer una comparativa de si una cadena contiene otra o parte de la otra. Por ejemplo quiero printear todas los strings que tengan ...
  #1 (permalink)  
Antiguo 17/04/2009, 01:25
 
Fecha de Ingreso: mayo-2008
Mensajes: 65
Antigüedad: 16 años
Puntos: 0
Cadena1 contiene cadena2

Hola, quiero hacer una comparativa de si una cadena contiene otra o parte de la otra. Por ejemplo quiero printear todas los strings que tengan la letra 'y' o todas las que tengan 'hola'.

Hay alguna posibilidad? Lo que mas me he acercado a sido con cadena1.equals(cadena2), pero en ese caso tienen que ser iguales, y yo quiero que CONTENGA.

No se si es psoible hacerlo.

Un saludo y gracias
  #2 (permalink)  
Antiguo 17/04/2009, 02:53
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: Cadena1 contiene cadena2

Pues no se si existira un método ya hecho, pero si no puedes hacer un bucle que recorra el string:
cadena1 = "adios hola adios";
cadena2 = "hola";

for (int i = 0; i<cadena1.lenght(); i++){

cadenita = cadena1.substring(i,cadena2.length());
if(cadena1.equals(cadena2){
//se ha encontrado
}
}
  #3 (permalink)  
Antiguo 17/04/2009, 03:10
 
Fecha de Ingreso: mayo-2008
Mensajes: 65
Antigüedad: 16 años
Puntos: 0
Respuesta: Cadena1 contiene cadena2

No consigo que fucnione. Para que utilizas el cadenita? Luego no s eusa más no?

Cita:
public class StrContStr
{
public static void main(String[] args)
{
String cadena1 = "adios hola adios";
String cadena2 = "hola";
String cadenita;

for (int i=0;i<cadena1.length();i++)
{
cadenita = cadena1.substring(i,cadena2.length());
if(cadena1.equals(cadena2))
{
System.out.println("Se ha encontrado");
}
}
}
}
Me da este error.

Cita:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
Puedes corregir mi codigo para que funcione, si no es mucho pedir?
  #4 (permalink)  
Antiguo 17/04/2009, 03:14
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: Cadena1 contiene cadena2

uyyy se me ha ido la cabeza!!!!

si, es

Código:
cadenita = cadena1.substring(i,cadena2.length()+i);
if(cadenita.equals(cadena2){

}
Cadenita es un trozo del string que va desde i hasta (i+longitud de la cadena2)

El error es que te sales, supongo que el bucle será hasta cadena1.length()-1


Saludos
  #5 (permalink)  
Antiguo 17/04/2009, 03:22
 
Fecha de Ingreso: mayo-2008
Mensajes: 65
Antigüedad: 16 años
Puntos: 0
Respuesta: Cadena1 contiene cadena2

Haciendo el cambio que has propuesto funciona "bien". Lo pongo entre comillas por que me da la respuesta bien, pero me sigue saliendo la excepción, a veces con el numero 1 otras con 17...

Estaría bien poder solucionar eso también, pero no controlo muy bien este tema.
  #6 (permalink)  
Antiguo 17/04/2009, 03:30
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: Cadena1 contiene cadena2

madre mia que cabeza tengo!

claro, el bucle acaba no en la longitud de cadena 1, sino en longitud de cadena1-longitud de cadena2 (no se si mas 1 o menos uno... ve diciendole que te imprima cadenita y lo descubres)
  #7 (permalink)  
Antiguo 17/04/2009, 03:43
 
Fecha de Ingreso: mayo-2008
Mensajes: 65
Antigüedad: 16 años
Puntos: 0
Respuesta: Cadena1 contiene cadena2

Ya funciona perfecto! Pongo aquí el código por si alguien lo necesita alguna vez. Printea el mensaje "Se ha encontrado" la cantida de veces que existe la cadena2 en la cadena1. He hecho varias pruebas y creo que funciona perfecto.

D
Cita:
public class StrContieneStr2
{
public static void main(String[] args)
{
String cadena1 = "Comparador Strings";
String cadena2 = "String";
String cadenita;

for (int i=0;i<cadena1.length()-cadena2.length()+1;i++)
{
cadenita = cadena1.substring(i,cadena2.length()+i);
if(cadenita.equals(cadena2))
{
System.out.println("Se ha encontrado");
}
}
}
}
Muchas gracias cucuru! Me ha venir bien este código para un trabajo que tengo que hacer.
  #8 (permalink)  
Antiguo 17/04/2009, 06:14
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Cadena1 contiene cadena2

¿Pero es que nadie se mira la documentación?
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #9 (permalink)  
Antiguo 17/04/2009, 09:01
Avatar de cptanalatriste  
Fecha de Ingreso: octubre-2008
Ubicación: Lima, Perú
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Cadena1 contiene cadena2

Creo que ya existe un método en el API para eso:

public int indexOf(String str)

Y aquí hay un ejemplito:

http://www.esus.com/docs/GetQuestionPage.jsp?uid=561

Saludos!
__________________
Carlos G. Gavidia
Sun Certified Professional
IBM Certified Solution Designer
http://certified-es.blogspot.com/
  #10 (permalink)  
Antiguo 17/04/2009, 09:21
 
Fecha de Ingreso: mayo-2008
Mensajes: 65
Antigüedad: 16 años
Puntos: 0
Respuesta: Cadena1 contiene cadena2

LLevas razón, lo he probado y también funciona.

Gracias a los dos
  #11 (permalink)  
Antiguo 20/04/2009, 04:07
 
Fecha de Ingreso: mayo-2008
Mensajes: 65
Antigüedad: 16 años
Puntos: 0
Respuesta: Cadena1 contiene cadena2

Y por complicarlo un poco más. El código anterior busca el String exacto, pero si yo quiero hacer esto por ejemplo?

String1 "Gracias a todos por la ayuda"
String2 "Gracias por la ayuda"
String3 "Gracias todos"

Y que comparé el String 3, que es lo que quiero buscar, con los demás y me diga, el String 1 contiene eso.

Resuminedo que haga una busqueda por palabras. Como podría hacer eso?
  #12 (permalink)  
Antiguo 20/04/2009, 04:12
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Cadena1 contiene cadena2

WEnas

Tendrias que buscar cada palabra de String3 en String1, Para ello te puedes apoyar en StringTokenizer para coger cada palabra de String3.

Luego con un bucle preguntas con el indexOf si esa palabra existe si es asi, continuas con la siguiente palabra, si no, sales del bucle.

Saludos.
  #13 (permalink)  
Antiguo 20/04/2009, 04:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: Cadena1 contiene cadena2

Es lo mismo, simplemente divide el string3 en palabras , y con cada palabra pues le pasas el código de antes
  #14 (permalink)  
Antiguo 20/04/2009, 08:08
 
Fecha de Ingreso: mayo-2008
Mensajes: 65
Antigüedad: 16 años
Puntos: 0
Respuesta: Cadena1 contiene cadena2

A ver si lo consigo pues. La cosa es que quiero hacer una busqueda por el Subject de un correo electrónico y por eso me vendrá bien hacer "el plus" de buscar todo lo que contiene y no solo excato. Además quiero implementar la misma función para el cuerpo o más cosas.

A ver si puedo conseguirlo, ya que con las busquedas de strings siempre tengo lios, pero se intentará, jeje
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 05:03.