Sendero: Aprendiendo el Lenguaje Java
Lección: Números y Cadenas
Sección: Cadenas
Manipulando Caracteres en una Cadena
Manipulando Caracteres en una Cadena
La clase String tiene una cantidad de métodos para examinar el contenido de una cadena, encontrar caracteres o subcadenas dentro de una cadena, cambiar mayúsculas/minúsculas, y otras tareas

Obteniendo Caracteres y Subcadenas mediante Índice

Puede obtener el carácter en un índice particular en una cadena invocando el método accesor charAt(). El índice del primer carácter es 0, mientras que el índice del último carácter es length()-1. Por ejemplo, el siguiente código obtiene el carácter en el índice 9 en una cadena:
String anotherPalindrome = "Niagara. O roar again!"; 
char aChar = anotherPalindrome.charAt(9);
Los índices inician en 0, así que el carácter en el índice 9 es 'O', como se ilustra en la siguiente figura:

Use the charAt method to get a character at a particular index.

Si desea obtener más de un carácter consecutivo de una cadena, puede usar el método substring. El método substring tiene dos versiones, como se muestra en la segunda tabla:

El Método substring en la Clase String Método Descripción String substring(int beginIndex, int endIndex) Devuelve una nueva cadena que es una subcadena de esta cadena. El primer argumento especifica el índice del primer carácter. El segundo argumento entero es el índice del último carácter + 1. String substring(int beginIndex) Devuelve una nueva cadena que es una subcadena de esta cadena. El argumento entero especifica el índice del primer carácter. Aquí, la subcadena devuelta se extiende al final de la cadena original.

El siguiente código obtiene  del palíndrome Niagara la subcadena que se extiende desde el índice 11 hasta, pero no incluído, el índice 15, que es la palabra "roar" (rugir).

String anotherPalindrome = "Niagara. O roar again!"; 
String roar = anotherPalindrome.substring(11, 15); 

Use the substring method to get part of a string.

Otros Métodos para Manipular Cadenas

Aquí hay otros varios métodos de String para manipular cadenas:

Otros Métodos en la Clase String para Manipular Cadenas
Método Descripción
String[] split(String regex)
String[] split(String regex, int limit)
Busca una concordancia según se especifica por el argumento de cadena (que contiene una expresión regular) y parte la cadena en un arreglo de cadenas acordemente. El argumento entero opcional especifica el tamaño máximo del arreglo devuelto. Las expresiones regulares se cubren en la lección llamada "Expresiones Regulares."

Searches for a match as specified by the string argument (which contains a regular expression) and splits this string into an array of strings accordingly. The optional integer argument specifies the maximum size of the returned array. Regular expressions are covered in the lesson titled "Regular Expressions."

CharSequence subSequence(int beginIndex, int endIndex) Devuelve una secuencia de carácter nuevo construída desde el índice beginIndex hacia arriba hasta endIndex - 1.
String trim() Devuelve una copia de esta cadena con espacios en blanco al principio y al final removidos.
String toLowerCase()
String toUpperCase()
Devuelve una copia de esta cadena convertida a minúscula o mayúscula. Si no se necesitan conversiones, estos métodos devuelven la cadena original.

Buscando Caracteres y Subcadenas en una Cadena

Aquí hay algunos otros métodos de String para encontrar caracteres o subcadenas en una cadena. La clase String provee métodos accesores que devuelven la posición dentro de la cadena de un carácter específico o subcadena: indexOf() y lastIndexOf(). Los métodos indexOf() buscan hacia adelante desde el principio, y los métodos lastIndexOf() buscan hacia atrás desde el final de la cadena. Si un carácter o subcadena no se encuentra, indexOf() y lastIndexOf() devuelven -1.

La clase String también provee un método de búsqueda, contains, que devuelve true si la cadena contiene una secuencia de caracteres particular. Use este método cuando necesite solamente saber que la cadena contiene una secuencia de caracteres, pero la ubicación precisa no es importante.

La siguiente tabla describe los varios métodos de búsqueda de cadenas.

El Método Search en la Clase String
Método Descripción
int indexOf(int ch)
int lastIndexOf(int ch)
Devuelve el índice de la primer (última) ocurrencia del carácter especificado.
int indexOf(int ch, int fromIndex)
int lastIndexOf(int ch, int fromIndex)
Devuelve el índice de la primer (última) ocurrencia del carácter especificado, buscando hacia adelante (hacia atrás) desde el índice especificado.
int indexOf(String str)
int lastIndexOf(String str)
Devuelve el índice de la primer (última) ocurrencia de la subcadena especificada.
int indexOf(String str, int fromIndex)
int lastIndexOf(String str, int fromIndex)
Devuelve el índice de la primer (última) ocurrencia de la subcadena especificada, buscando hacia adelante (hacia atrás) desde un índice especificado.
boolean contains(CharSequence s) Devuelve true si la cadena contiene la secuencia especificada de caracteres.


Nota: CharSequence es una interfaz que es implementada por la clase String. Por eso, puede usar una cadena como un argumento para el método contains(.

Reemplazando Caracteres y Subcadenas en una Cadena

La clase String tiene muy pocos métodos para insertar caracteres o subcadenas dentro de una cadena. En general, estos no se necesitan: Puede crear una nueva cadena por concatenación o subcadenas que ha quitado de una cadena con la subcadena que desea insertar.

Sin embargo, la clase String tiene cuatro métodos para reemplazar caracteres o subcadenas encontrados. Estos son:

Métodos en la Clase String para Manipular Cadenas
Método Descripción
String replace(char oldChar, char newChar) Devuelve una nueva cadena resultante de reemplazar todas las ocurrencias de oldChar en esta cadena con newChar.
String replace(CharSequence target, CharSequence replacement) Reemplaza cada subcadena de esta cadena que encaja la secuencia literal de destino con una secuencia literal de reemplazo especificada.
String replaceAll(String regex, String replacement) Reemplaza cada subcadena de esta cadena que encaja la expresión regular dada con el reemplazo dado.
String replaceFirst(String regex, String replacement) Reemplaza la primer subcadena de esta cadena que encaje con la expresión regular dada con el reemplazo dado.

An Example

La siguiente clase, Filename, ilustra el uso de lastIndexOf() y substring() para indicar diferentes partes de un nombre de archivo.


Nota: Los métodos en la siguiente clase Filename no efectúnan ninguna comprobación de errores y asumen que su argumento contiene una ruta completa de directorio y un nombre de archivo con  una extensión. Si estos métodos fueran código de producción, verificarían que sus argumentos estuvieran apropiadamente construídos.
/**
 * Esta clase asume que la cadena usada para inicializar
 * fullPath tiene una ruta de directorio, nombre de archivo y extensión.
 * Los métodos no funcionarán en caso contrario.
 */
public class Filename {
    private String fullPath;
    private char pathSeparator, extensionSeparator;

    public Filename(String str, char sep, char ext) {
        fullPath = str;
        pathSeparator = sep;
        extensionSeparator = ext;
    }

    public String extension() {
        int dot = fullPath.lastIndexOf(extensionSeparator);
        return fullPath.substring(dot + 1);
    }

    public String filename() {  // obtiene el nombre de archivo sin la extensión
        int dot = fullPath.lastIndexOf(extensionSeparator);
        int sep = fullPath.lastIndexOf(pathSeparator);
        return fullPath.substring(sep + 1, dot);
    }

    public String path() {
        int sep = fullPath.lastIndexOf(pathSeparator);
        return fullPath.substring(0, sep);
    }
}
Aquí está un programa, FilenameDemo, que construye un objeto nombre de archivo Filename y llama a todos sus métodos:
public class FilenameDemo {
    public static void main(String[] args) {
        final String FPATH = "/home/mem/index.html";
        Filename myHomePage = new Filename(FPATH,
                                           '/', '.');
        System.out.println("Extensión = " + 
             myHomePage.extension());
        System.out.println("Nombre de Archivo = " + 
             myHomePage.filename());
        System.out.println("Ruta = " + 
             myHomePage.path());
    }
}
Y aquí está la salida del programa:
Extensión = html
Nombre de archivo = index
Ruta = /home/mem
Como se muestra en la siguiente figura, nuestro método extension usa lastIndexOf para ubicar la última ocurrencia del punto (.) en el nombre de archivo. Entonces substring usa el valor de regreso de lastIndexOf para extraer la extensión del nombre de archivo — esto es, la subcadena desde el punto hasta el final de la cadena. Este código asume que el nombre de archivo tiene un punto; si el nombre de archivo no tiene un punto,, lastIndexOf devuelve -1, y el método de subcadena lanza una StringIndexOutOfBoundsException.

The use of lastIndexOf and substring in the extension method in the Filename class.

También,, note que el método extension usa dot + 1 como el argumento de substring. Si el carácter de punto (.) es el último carácter de la cadena, dot + 1 es igual a la longitud de la cadena, que es uno más grande que el índice más grande dentro de la cadena (porque los índices inician en 0). Este es un argumento legal para substring porque ese método acepta un índice igual a, pero no mayor que, la longitud de la cadena y la interpreta para significar "el final de la cadena".

Página anterior: Convirtiendo Entre Números y Cadenas
Página siguiente: Comparando Cadenas y Porciones de Cadenas




Ir a los Foros del Sitio

Ir a los Foros del Sitio