[ Foro de Java ]

ayuda con ristras de caracteres

12-Feb-2014 16:04
bryan cumbajin
10 Respuestas

Añada la clase StringUtils un método public y static llamado span que devuelva un resultado de la clase String. El método tendrá 2 parámetros que serán objetos de la clase String, representando ristras no vacías

El método devolverá un nuevo objeto String que contendrá una copia de la subristra más larga de la ristra representada por el primer parámetro que empieze al principio de ésta y esté formada sólo por caracteres que formen parte de la ristra representada por el segundo parámetro.

PD: ¿Alguien podria esplicarme que es lo que me pide? si me poneis un ejemplo estaría muy agradecido y si me ayudais a resolverlo aun más xD


12-Feb-2014 22:39
Nacho Cabanes (+31)

A mí me suena a que tienes que crear una función "span" que reciba dos cadenas, como

 
span("este es un ejemplo","mole");
 


y entonces debería devolver una cadena formada por las letras de la primera cadena que aparezcan en la segunda (la "m", la "o", la "l" y la "e"): "eeeeemlo"


13-Feb-2014 19:17
bryan cumbajin

gracias, por la ayuda lo he resuelto pero me salta un error para un caso concreto:

 
package es.ulpgc.eii.strings;
 
public class StringUtils {
    public static String span (String s1, String s2) {
 
     String s = "";
 
 
      for (int i = 0; i < s1.length(); i++) {
 
          for (int j = 0; j < s2.length(); j++) {
 
              if (s1.charAt(i) == s2.charAt(j)) {
               s += s1.charAt(i);   
 
              }else{
                  if (s2.charAt(j) != s1.charAt(0)) s += "";
              }
          }
      }
    return s;    
    }
}
 


El error que me salta es del tipo del siguiente ejemplo:

s1   "01234abcde"
s2   "abcdefghijklmnñopqrstuvwxyz".

Se obtiene "abcde", y debería obtenerse "" (que es una string vacia)
ya que como dice el apartado debe empezar al principio de la ristra s1


14-Feb-2014 00:29
Nacho Cabanes (+31)

Claro, pero eso es muy sencillo de solucionar. Te basta con un "si la primera letra no coincide con la primera letra, devolver cadena vacía".  ;-)


14-Feb-2014 10:55
bryan cumbajin

es lo que tengo puesto en el segundo if pero no me lo acepta


14-Feb-2014 11:30
Nacho Cabanes (+31)

Nada de segundo "if". Un primer "if", antes de entrar al doble "for", debe comprobar si las dos primeras letras coinciden, porque si no es así, no se debe seguir analizando y hay que devolver una cadena vacía.


14-Feb-2014 12:07
bryan cumbajin

es que el programa no debe comparar si las dos primeras letras coinciden. Debe comprobar que el primer caracter de la ristra "s1" se encuentra en toda la ristra de "s2" para a partir de ahí construir la ristra resultante.
Fíjate en el error que me saltó, el primer caracter "0" no se encuentra en "s2" por lo que me devuelve una ristra vacia independientemente de que coincidan "abcde".

Creo que me he explicado bien, gracias por tu ayuda :)       ¿Alguna solucion?


14-Feb-2014 13:26
Nacho Cabanes (+31)

Ah, es cierto!

El carácter inicial debe estar en la otra cadena, pero puede estar en cualquier posición, no necesariamente al principio.

En cualquier caso, eso debe ser algo anterior a los "for", tratado como caso especial, sólo que en vez de mirar si la primera letra coincide con la primera letra, mirarías si la primera letra está dentro de la otra cadena, usando (por ejemplo) "indexOf":

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(int, int)


14-Feb-2014 16:30
bryan cumbajin

estoy intentando implementarlo pero no lo consigo un ultimo consejo porfa, o me lo resulves directamente que estoy agobiado ya con esto xD


15-Feb-2014 10:37
Nacho Cabanes (+31)

No tengo aquí un entorno de Java, así que esto estará sin probar, pero yo haría algo como:

 
public static String span (String s1, String s2) {
    char inicial = s1.charAt(0);
    if (s2.indexOf(inicial) == -1) return "";
    ...
 


(es decir, tomas la inicial de s1, y si no aparece en s2, sales devolviendo una cadena vacía).


15-Feb-2014 14:49
bryan cumbajin

MIL GRACIAS!!! Me va de fabula eres el mejor ;-)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)