0 votos
por (320 puntos) en Java
Buenas, lo primero decir que esta pagina me están ayudando bastante con la programación, así que os doy las gracias. Ahora la duda :)

Esta es la función que tengo hecha para mostrar un fragmento de una cadena que introduce un usuario. Los datos los pido en el programa principal:

<pre lang='Java'>
public static String devolverFragmento(String cadena, int posIni, int posFin){
    String fragmento="";
    int resto;

    for (int x=posIni; x<posFin; x++){
        fragmento+=cadena.charAt(x);

        if (posFin>cadena.length()){
            resto=posFin-cadena.length();
            posFin=posFin-resto;
        }
    }
    return fragmento;
}
public static void main (String []args){
        Scanner sc = new Scanner (System.in);
    String cadena="";
    int posIni;
    int posFin;

        System.out.println("Introduce la posicion inicial");
    posIni = sc.nextInt();
    System.out.println("Introduce la posicion final");
    posFin = sc.nextInt();

    System.out.println(devolverFragmento(cadena, posIni, posFin));
    System.out.println();

No se si esta bien escrito el código, porque la posición que se introduce no se cuenta a la hora de mostrar el fragmento. Por ejemplo, si tengo  la cadena "Hola", y posIni=1 y pos posFin=4, en vez de mostrar "Hola" muestra "ola", comiendose la H. Tambien me da problemas cuando se introducen numero fuera de rango, cosa que tengo que controlar de alguna forma.

Gracias de antemano.


4 Respuestas

0 votos
por (8.5k puntos)
Está bien como práctica, pero también podrías utilizar la función ya existente, subString:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#substring%28int,%20int%29

Por otro lado, el problema con la posición inicial, es que no es 1, es 0. Por ejemplo:

"Hola".subString(0,1) devuelve la cadena "H"


0 votos
por (320 puntos)
Conozco esa función, pero el problema es que en el ejercicio solo se me permite utilizar la funcion charAt() y el método .lentgth.


0 votos
por (4.3k puntos)
@MarkNebraska,

El problema está en que al manejar caracteres el primero de ellos se numera como 0. Es por ello que si introduces de la posición 1 a la 4, cuando recorrer la cadena tienes que empezar por una posición menor.

Es decir, tu for sería:

for (int x=posIni-1; x<posFin; x++){...}
Con respecto al fuera de rango es que compares contra el tamaño de la cadena. Y si se sale, pues volver a pedir al usuario los datos.

if posFin>cadena.length())
Espero que te sirva.


0 votos
por (320 puntos)
Gracias compañeros, me ha servido vuestra ayuda.

Consultare esta pagina ams a menudo :)


Preguntas relacionadas

0 votos
1 respuesta
0 votos
2 respuestas
preguntado por bones18 (20 puntos) Ene 28, 2016 en Java
0 votos
0 respuestas
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...