TutorJava Nivel Básico

Las variables de ejemplar de un objeto est�n encapsuladas dentro del objeto, ocultas en su interior, seguras frente a la inspecci�n y manipulaci�n por otros objetos. Con ciertas excepciones bien definidas, los m�todos del objeto no son los �nicos a trav�s de los cuales un objeto puede inspeccionar o alterar las variables de otro objeto. La encapsulaci�n de los datos de un objeto lo protege de la corrupci�n de otros objetos y oculta los detalles de implementaci�n a los objetos extra�os. Esta encapsulaci�n de datos detr�s de los m�todos de un objeto es una de las piedras angulares de la programaci�n orientada a objetos.

Los m�todos utilizados para obtener informaci�n de un objeto son conocidos como m�todos accesores. El m�todo reverseIt() utiliza dos m�todos accesores de String para obtener informaci�n sobre el string source.

Primero utiliza el m�todo accesor: length() para obtener la longitud de la cadena source.

int len = source.length();

Observa que a reverseIt() no le importa si el String mantiene su longitud como un entero, como un n�mero en coma flotante o incluso si calcula la longitud al vuelo. reverseIt() simplemente utiliza el interface p�blico del m�todo length() que devuelve la longitud del String como un entero. Es todo lo que necesita saber reverseIt().

Segundo, utiliza el m�todo accesor: charAt() que devuelve el car�cter que est� situado en la posici�n indicada en su argumento.

source.charAt(i)

El car�cter devuelto por charAt() es el que se a�ade al StringBuffer dest. Como la variable del bucle i empieza al final de source y avanza hasta el principio de la cadena, los caracteres se a�aden en orden inverso al StringBuffer.

.�M�s M�todos Accesores

Adem�s de length() y charAt(), String soporta otros m�todos accesores que proporcionan acceso a subcadenas y que indican la posici�n de caracteres espec�ficos en la cadena. StringBuffer tiene sus propios m�todos accesores similares.

.�Para la Clase String

Adem�s de los accesores length() y charAt() que hemos visto antes, la clase String proporciona dos accesores que devuelven la posici�n dentro de una cadena de un car�cter espec�fico: indexOf() y lastIndexOf(). El m�todo indexOf() busca empezando desde el principio de la cadena y lastIndexOf() busca empezando desde el final.

Los m�todos indexOf() y lastIndexOf() se utilizan frecuentemente con substring(), que devuelve una subcadena de una cadena. La siguiente clase ilustra el uso de lastIndexOf() y substring() para aislar diferentes partes de un nombre de fichero.

Nota: Estos m�todos no dan ning�n error de chequeo y asumen que el argumento contiene un path completo con nombres de directorios y un nombre de fichero con extensi�n. Si estos m�todos se utilizaran en alg�n programa deber�an comprobar que los argumentos estuvieran construidos de forma apropiada.

class NombreFichero {
    String path;
    char separador;

    NombreFichero(String str, char sep) {
        path = str;
        separador = sep;
    }

    String extension() {
        int punto = path.lastIndexOf('.');
        return path.substring(punto + 1);
    }

    String NombreFichero() {
        int punto = path.lastIndexOf('.');
        int sep = path.lastIndexOf(separador);
        return path.substring(sep + 1, punto);
    }

    String path() {
        int sep = path.lastIndexOf(separador);
        return path.substring(0, sep);
    }
}

Aqu� hay un peque�o programa que construye un objeto NombreFichero y llama a todos sus m�todos.

class NombreFicheroTest {
    public static void main(String[] args) {
        NombreFichero miHomePage = new NombreFichero("/home/index.html", '/');
        System.out.println("Extension = " + miHomePage.extension());
        System.out.println("Nombre de Fichero = " + miHomePage.NombreFichero());
        System.out.println("Path = " + miHomePage.path());
    }
}

Aqu� tienes la salida del programa.

Extension = html
NombreFichero = index
Path = /home

El m�todo extension() utiliza lastIndexOf() para localizar la �ltima aparici�n de un punto ('.') en el nombre del fichero. Luego substring() utiliza el valor devuelto por lastIndexOf() para extraer la extensi�n del fichero--esto es, una subcadena desde el punto ('.') hasta el final de la cadena. Este c�digo asume que el nombre del fichero tiene realmente un puno ('.'), si no lo tiene lastIndexOf() devuelve -1, y el m�todo substring() lanzar� una StringIndexOutOfBoundsException.

Observa, tambi�n que extension() utiliza dot + 1 como el argumento para substring(). Si el punto es el �ltimo car�cter de la cadena, dot + 1 es igual a la longitud de la cadena que es uno m�s que la longitud del texto de la cadena (porque los indices empiezan en 0). Sin embargo, substring() accepta un �ndice igual (pero no mayor) que la longitud de la cadena y lo interpreta como "el final de la cadena".

Intenta esto: Inspeccione los otros m�todos utilizados en la clase NombreFichero y observa c�mo los m�todos lastIndexOf() y substring() trabajan juntos para aislar diferentes partes de un nombre de fichero.

Mientras los m�odos del ejemplo anterior s�lo utilizan una versi�n del m�todo lastIndexOf(), la clase String realmente soporta cuatro diferentes versiones de los m�todos indexOf() y lastIndexOf(). Las cuatro versiones trabajan de la siguiente forma.

indexOf(int character)
lastIndexOf(int character)
Devuelve el �ndice de la primera (o �ltima) ocurrencia del car�cter especificado.
indexOf(int character, int from)
lastIndexOf(int character, int from)
Devuelve el �ndice de la primera (o �ltima) ocurrencia del car�cter escpecificado desde el �ndice especificado.
indexOf(String string)
lastIndexOf(String string)
Devuelve el �ndice de la primera (o �ltima) ocurrencia de la Cadena especificada.
indexOf(String string, int from)
lastIndexOf(String string, int from)
Devuelve el �ndice de la primera (o �ltima) ocurrencia de la cadena escpecificada desde el �ndice especificado.

.�Para la Clase StringBuffer

Al igual que String, StringBuffer porporciona los m�todos accesores length() y charAt(). Adem�s de estos dos, accesores, StringBuffer tambi�n tiene un m�todo llamado capacity(). Este m�todo es diferente de length() en que devuelve la cantidad de espacio asignado actualmente para el StringBuffer en vez de la cantidad de espacio utilizado. Por ejemplo, la capacidad del StringBuffer de reverseIt() no cambia nunca, aunque la longitud del StringBuffer se incremente en cada vuelta del bucle.

class ReverseString {
    public static String reverseIt(String source) {
        int i, len = source.length();
        StringBuffer dest = new StringBuffer(len);

        for (i = (len - 1); i >= 0; i--) {
            dest.append(source.charAt(i));
        }
        return dest.toString();
    }
}

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP