[ Foro de Java ]
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
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"
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
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". ;-)
es lo que tengo puesto en el segundo if pero no me lo acepta
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.
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?
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)
estoy intentando implementarlo pero no lo consigo un ultimo consejo porfa, o me lo resulves directamente que estoy agobiado ya con esto xD
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).
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.)