2010-10-20 7 views
6

Hola
Estoy intentando escribir una función recursiva que calcula la longitud de la cadena en Java
Sé que ya existe la función str.length(), pero el planteamiento del problema quiere implementar una función recursiva¿cómo termina la cuerda en java?

En lenguaje de programación C el carácter de terminación es '\ 0', solo quiero saber cómo saber si la cadena termina en Java

Mi programa finaliza bien cuando pongo '\ n' en la cadena de prueba. Por favor hagamelo saber. ¡Gracias!

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package careercup.google; 

/** 
* 
* @author learner 
*/ 
public class Strlen { 
    private static final String Test = "abcdefg\n"; 
    private static int i =0; 

    public static void main(String args[]){ 
     System.out.println("len : " + strlen(Test)); 
    } 

    private static int strlen(String str){ 
     if(str == null){ 
      return 0; 
     } 
     if(str.charAt(i) == '\n'){ 
      return 0; 
     } 
     i += 1; 
     return 1 + strlen(str); 
    } 
} 

Salida:

run: 
len : 7 
BUILD SUCCESSFUL (total time: 0 seconds) 

Respuesta

2

Tenga en cuenta que este código es muy ineficiente, pero calcula longitud de una cadena de forma recursiva.

private static int stringLength(String string){ 
     if(string == null){ 
      return 0; 
     } 

     if(string.isEmpty()){ 
      return 0; 
     } 

     return 1 + stringLength(string.substring(1)); 
    } 
+0

+1, este fue el ejemplo (completamente inventado) que habría escrito, si no me hubieras salvado de la tarea:) –

+0

@learner: Este ejemplo es mucho menos artificial en C, donde tiene acceso a la memoria vacía, y el código (cuando está optimizado) se compila en el mismo ciclo que: 'int count = 0; while (pointerToChar ++! = NULL) {count ++; } ' –

14

cadenas de Java no son cadenas C. La cadena termina después del número de caracteres en su longitud.

+0

Hola, Ignacio, ¿eso significa que nunca podremos saber si una cadena está terminada excepto si (i == str.length() - 1) ?? – daydreamer

+4

@learner. Sí. Pero a la inversa, puede llamar a String.length y le dirá la longitud sin tener que iterar toda la cadena para encontrar el terminador. Ésto es una cosa buena. – Thilo

+0

Gracias Thilo !, entendí tu punto, solo estaba vagando si escribir tal función es posible en Java – daydreamer

1

No creo que esto es una buena pregunta, ya cadena en Java está respaldado por una matriz de caracteres con un recuento, se puede obtener la longitud manera muy simple, ¿por qué tomarse la molestia de poner en práctica un método recursivo?

+2

La pregunta incluye" el enunciado del problema "y el cartel menciona al propio' string.length'. Por lo tanto, supongo que esto es algún tipo de ejercicio sobre funciones recursivas: invocación recursiva + condición de terminación. La pregunta, como expresar la condición de terminación dado que no hay un personaje "centinela" es perfectamente válida, en mi humilde opinión. –

Cuestiones relacionadas