Advertisement
  1. Code
  2. Android SDK

Aprenda el desarrollo de Java para Android: Conceptos básicos sobre cadenas

Scroll to top
Read Time: 12 min
This post is part of a series called Learn Java for Android Development.
Learn Java for Android Development: Javadoc Code Documentation
Learn Java for Android Development: Date and Time Basics

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

En este tutorial, se familiarizará con una de las estructuras de datos de programación más importantes (tipos) en Java: String. Las variables de cadena se pueden utilizar para almacenar los datos textuales (letras, números, símbolos) asociados con un programa.

Las aplicaciones para Android están escritas en Java, un lenguaje de programación. Java tiene varios tipos de datos primitivos para diferentes tipos de números (enteros, flotadores, etc.), valores booleanos y caracteres individuales. Además de almacenar datos textuales como arrays o caracteres, Java también incluye una poderosa clase de objetos llamada String (java.lang.String), que encapsula datos textuales de forma ordenada y puede usarse para manipular contenido. En este tutorial, aprenderá cómo crear, usar y manipular cadenas de diferentes maneras, incluyendo cómo almacenarlas como recursos de proyectos de Android.

Lo que necesitarás

Técnicamente, no necesitas herramientas para completar este tutorial, pero sin duda necesitarás para desarrollar aplicaciones de Android.

Para desarrollar aplicaciones de Android (o cualquier otra aplicación de Java, para eso), necesita un entorno de desarrollo para escribir y crear aplicaciones. Eclipse es un entorno de desarrollo muy popular (IDE) para Java y el IDE preferido para el desarrollo de Android. Está disponible gratuitamente para los sistemas operativos Windows, Mac y Linux.

Para obtener instrucciones completas sobre cómo instalar Eclipse (incluidas las versiones compatibles) y el SDK de Android, consulte el sitio web de desarrolladores de Android.

¿Qué es una cadena?

En el nivel más fundamental, los programas Java se dividen en funcionalidad y datos. Muchos datos legibles por humanos vienen en las formas de palabras, caracteres, puntuación, números y así sucesivamente. Básicamente, cualquier cosa que el usuario pueda escribir en un teclado. Los programadores llaman a este almacenamiento de contenido textual "datos de cadena", pero los datos en sí se pueden almacenar utilizando una variedad de estructuras de datos diferentes, dependiendo de sus necesidades:

  • La clase Java String (java.lang.String) es una clase de utilidad para almacenar datos de cadena que no se modificarán.
  • La clase Java StringBuilder (java.lang.StringBuilder) es una clase de utilidad para almacenar datos de cadena que se modificarán; Utilizado cuando la concurrencia no es un problema.
  • La clase Java StringBuffer (java.lang.StringBuffer) es una clase de utilidad para almacenar datos de cadenas que serán modificados; Utilizado cuando concurrencia es un problema.
  • Una matriz de primitivas char o Caracteres (java.lang.Character) variables
  • Una matriz de primitivas byte o Byte (java.lang.Byte) variables
  • Varias otras estructuras de datos y clases de objetos se pueden utilizar para almacenar datos de cadena

Como puede ver, hay muchas maneras de almacenar datos de cadena en Java. Por ejemplo, las siguientes variables Java representan una cadena de caracteres de vocales de diferentes maneras (como bytes, caracteres, representaciones Unicode o sub-cadenas):

1
String strVowels = "aeiou";
2
char astrVowels[] = { 'a', 'e', 'i', 'o', 'u' };
3
byte abyteVowels[] = { 'a', 'e', 'i', 'o', 'u' };
4
byte abyteVowelsU[] = { '\u0061', '\u0065','\u0069','\u006F','\u0075' };
5
String uVowels = new String("\u0061\u0065\u0069\u006F\u0075");
6
CharSequence csVowels = (CharSequence) new String("aeiou");
7
StringBuffer sbVowels = new StringBuffer("a" + "e" + "iou");
8
StringBuilder sVowelBuilder = new StringBuilder();
9
sVowelBuilder.append('a');
10
sVowelBuilder.append("eio");
11
sVowelBuilder.append('\u0075');

La clase String es la clase de conveniencia más utilizada, especialmente por principiantes. También querrá tener una comprensión pasajera de la interfaz CharSequence (java.lang.CharSequence), ya que se utiliza a menudo cuando se trabaja con recursos de Android.

Trabajando con la clase String

La clase String está disponible como parte del paquete java.lang, que está incluido en el SDK de Android para que los desarrolladores lo utilicen. La documentación completa de la clase String se puede encontrar con la documentación de Android SDK.

La clase String representa una secuencia inmutable (no cambiable) de caracteres Unicode (codificación de 16 bits), apropiada para almacenar caracteres en cualquier idioma (inglés, alemán, japonés, etc.).

Entonces, ¿qué tiene que ver esto con el desarrollo de Android? Bueno, las cadenas se utilizan para almacenar el contenido que se muestra en las pantallas de la aplicación, o para almacenar la entrada de un usuario. Los desarrolladores de Android están constantemente cargando, creando y manipulando datos de cadena. Así que veamos algunas de las cosas que podemos hacer con la clase String.

Creación de cadenas

La clase String tiene numerosos constructores, para crear e instanciar variables de cadena. Las variables de cadena se pueden establecer en vacío con la palabra clave null. También puede establecer su contenido de bytes, caracteres u otros datos de cadena. Por ejemplo, aquí hay algunas formas de crear variables String para usarlas en sus aplicaciones (algunas se inicializan a partir de las variables, como uVowels y sVowelBuilder, definidas anteriormente en este tutorial):

1
String strVowels1 = "aeiou";
2
String strVowels2 = new String("aeiou");
3
String strVowels3 = new String(sVowelBuilder);
4
String strVowels4 = new String(sbVowels);
5
String strVowels5 = new String(uVowels);
6
String strVowels6 = new String(abyteVowels2);
7
String strVowels7 = new String(abyteVowelsU);
8
String strVowels8 = new String("a" + "e" + "iou");
9
String strVowels9 = new String( new char[]{'\u0061', 
10
                                                     '\u0065','\u0069','\u006F','\u0075'});
11
String strVowels10 = new String(new byte[]{ '\u0061',
12
                                                     '\u0065','\u0069','\u006F','\u0075' });

Uso de recursos de cadenas de Android

También puede cargar cadenas de recursos de aplicaciones de Android, siempre que las haya almacenado correctamente. Por ejemplo, puede cargar el recurso de cadena del nombre de la aplicación en una variable String de la siguiente manera:

1
String strAppName = getResources().getString(R.string.app_name);

Esto requiere que la aplicación de Android en cuestión contenga un recurso de cadena denominado app_name en algún lugar de la jerarquía de directorios de proyectos / res / values. Por ejemplo, un archivo llamado /res/values/strings.xml que contiene la siguiente definición de cadena XML:

1
<?xml version="1.0" encoding="utf-8"?>
2
<resources>
3
    <string name="app_name">My Android App Name!</string>
4
</resources>

Iteración simple de String

Ahora echemos un vistazo a algunas de las cosas interesantes que puede hacer para objetos String. Primero, enfocémonos en las características disponibles dentro de la clase String.

Es útil pensar en una cadena como una secuencia de caracteres. Como tal, a veces desea iterar a través de su contenido, un carácter a la vez. Hay muchas maneras de hacer esto, pero una manera simple es usar un bucle for(). Puede aprovechar el método length () String para determinar cuántos caracteres tiene y el método charAt () para recuperar un carácter específico por su índice, al igual que lo haría con un índice de matriz. Por ejemplo:

1
String strVowels = "AEIOU";
2
for (int i = 0; i 
3
String Modifications: The Basics
4
As mentioned earlier, String variables are immutable, or unchangeable. That is not to say you cannot manipulate the textual contents of a String variable, but each method that does so returns a new String variable. Some common examples of String class methods that generate new String variables include:
  • El método concat () se utiliza para concatenar o combinar dos cadenas en un nuevo objeto String. Nota: También puede utilizar el operador + para crear un nuevo objeto String a partir de partes también.
  • El método format () le permite crear plantillas parametrizadas (un tema más avanzado para futuras discusiones)
  • Los métodos replace() y replaceFirst() se utilizan para reemplazar un carácter o subcadena con otra subcadena. El método replaceAll() admite la correlación de patrones de expresión regular.
  • El método split() es útil para romper una String más grande en numerosas subcadenas. Por ejemplo, puede dividir una lista delimitada por comas en una matriz de objetos String, una para cada elemento de lista.
  • El método substring () se utiliza para extraer sólo parte del objeto String original.
  • Los métodos toUpperCase() y toLowerCase() se utilizan para cambiar el caso de String, especialmente útil para normalizar cadenas.
  • El método trim() se utiliza para cortar (eliminar) cualquier espacio en blanco antes o después del contenido de String.

Tenga en cuenta que cada uno de estos métodos asigna una nueva instancia de objeto String para almacenar el resultado. La variable String original permanece sin cambios.

Modificaciones de cadenas: Conversión a minúsculas y minúsculas

A veces quieres convertir tu cadena en mayúsculas o minúsculas. Una de las razones por las que quizás quiera cambiar el caso de una cadena es normalizar la cadena para que la búsqueda de mayúsculas o minúsculas sea más fácil de implementar.

1
String strUpperCaseVersion = strVowels.toUpperCase();
2
String strLowerCaseVersion = strVowels.toLowerCase();

Tenga en cuenta que aquí ha creado dos nuevas variables String para su uso. La variable String original, strVowels, permanece sin cambios.

Modificaciones de cadenas: División

A veces se desea analizar rápidamente una cadena en subcadenas. Puede hacer esto para extraer las palabras individuales de una oración, o una lista delimitada de etiquetas, etc. Puede utilizar expresiones regulares sencillas con la función split() para este propósito. Por ejemplo, el código siguiente extrae las palabras individuales (colores) de una cadena:

1
String someWords = "Red Orange Yellow Green Blue Indigo";
2
String aColors[] = someWords.split(" ");

Si usted imprimiera el contenido de la matriz String llamada aColors, vería que:

1
aColors[0]=Red
2
aColors[1]=Orange
3
aColors[2]=Yellow
4
aColors[3]=Green
5
aColors[4]=Blue
6
aColors[5]=Indigo

Tenga en cuenta que aquí ha creado una nueva matriz que contiene 6 nuevas variables String para su uso.

Simple String Coincidencia

Puede comprobar si dos cadenas coinciden con el método compareTo() de la clase String. Este método devolverá 0 si, y sólo si, las dos cadenas son idénticas:

1
String strVowels = "AEIOU";
2
if(strVowels.compareTo("AEIOU") == 0)
3
{
4
    // Strings match! (This code will execute)
5
} else {
6
    // Strings don’t match!
7
}

Tenga en cuenta que el método compareTo() distingue entre mayúsculas y minúsculas. Considere convertir ambos lados de su comparación a un caso antes de compararlos, a menos que esté buscando específicamente un caso. Si no te importa el caso, también puedes usar el método compareToIgnoreCase() en lugar del método compareTo():

1
String strVowels = "AEIOU";
2
if(strVowels.compareToIgnoreCase ("aeiou")== 0)
3
{
4
    // Strings match! (This code will execute)
5
} else {
6
    // Strings don’t match!
7
}

Simple String Busqueda

A veces desea buscar en una cadena un carácter o subcadena. Hay muchas otras maneras de realizar concordancia de cadenas y búsqueda, lo que le permite construir cualquier método de búsqueda que desee. También puede buscar caracteres específicos o subcadenas utilizando los métodos indexOf() y lastIndexOf(), compruebe si una cadena comienza o termina con una subcadena utilizando los métodos startsWith() y endsWith(). Finalmente, el método matches() soporta la correspondencia de expresiones regulares.

Aquí usamos el método contains() para determinar si existe una subcadena específica:

1
if(strVowels.contains("IOU")==true)
2
{
3
    // String contains IOU sub-string!
4
}

Si no le importa, usa el método compareToIgnoreCase() en su lugar:

1
String strVowels = "AEIOU";  	
2
if(strVowels. compareToIgnoreCase ("aeiou")== 0)
3
{
4
    // Strings match! (This code will execute)
5
} else {
6
    // Strings don’t match!
7
}

SUGERENCIA: Al implementar la funcionalidad de búsqueda y coincidencia en sus aplicaciones, no olvide realizar cualquier manipulación de secuencias de preprocesamiento necesaria para descartar problemas de cadena de mayúsculas / inferiores / mixtas antes de buscar. La normalización de entrada de usuario se puede hacer como parte del proceso de validación de entrada, manteniendo su código tan simple y mantenible como sea posible.

Cuerdas y otros tipos de datos

El objeto String es tan fundamental para Java que cada clase, debido a que se deriva de la clase raíz llamada Object (java.lang.Object), tiene un método toString () para crear una representación de cadena útil de su valor. Las clases que no tienen una representación de cadena razonable suelen devolver algún identificador o información de depuración en cuanto al tipo de clase. Aquellos que sí tienen una representación de cadena razonable, como una cadena numérica de un objeto Integer, devuelven la representación textual del número encapsulado. Cuando se concatena con una String, como con el operador plus (+) descrito anteriormente, los resultados del método toString () se usan de forma predeterminada. Por ejemplo:

1
Integer iNum = new Integer(123);
2
String sText = "The number one-two-three = ";
3
String sFullText = sText + iNum;
4
String sFullText2 = sText + iNum.toString();

Tanto las cadenas (sFullText como sFullText2) tienen el mismo valor, "El número uno-dos-tres = 123". Muchos de estos objetos también pueden funcionar en sentido inverso. Es decir, pueden analizar una representación de String y convertirla al tipo nativo que el objeto está representando. Para instace, de nuevo con la clase Integer, el método parseInt() se puede usar para obtener un nuevo objeto Integer basado en la representación de cadena.

Cadenas y rendimiento

Como usted ha visto, las secuencias se pueden utilizar para el gran efecto. Sin embargo, la creación y manipulación de cadenas tiene algunos inconvenientes. Imprudente La manipulación de cadenas puede tener implicaciones de rendimiento negativo para su aplicación. Es un principio de diseño básico de Java para no crear objetos que no necesita. Puede ver que la manipulación de cadenas y las modificaciones pueden resultar en una gran cantidad de variables de cadena flotando alrededor. Estos son algunos consejos para un buen uso de la cadena:

  • No cree variables de cadena que no necesite, especialmente las temporales.
  • Utilice las clases StringBuilder y StringBuffer para generar contenido de cadena desde cero.
  • Revise las sugerencias de rendimiento disponibles en el sitio web para desarrolladores de Android.
  • Utilice Constantes de cadena estáticas finales para los valores de String conocidos en tiempo de compilación.

Terminando

Las cadenas son un tipo de datos importante que los desarrolladores de Android utilizan para almacenar datos textuales. Los datos de cadena, ya sea una secuencia de caracteres, números, símbolos o alguna mezcla de los mismos, pueden almacenarse de varias maneras, pero la clase String es la clase de utilidad primaria utilizada para este propósito. La clase String, y sus clases auxiliares como StringBuilder, contienen un conjunto robusto de métodos para usar con cadenas, permiten que su contenido sea buscado o modificado.

Sobre los autores

Los desarrolladores de móviles Lauren Darcey y Shane Conder han coautorizado varios libros sobre desarrollo de Android: un libro de programación en profundidad titulado Android Wireless Application Development y Sams TeachYourself Desarrollo de aplicaciones para Android en 24 horas. Cuando no escriben, pasan su tiempo desarrollando software móvil en su empresa y brindando servicios de consultoría. Se puede contactar a través de correo electrónico a androidwirelessdev+mt@gmail.com, a través de su blog en androidbook.blogspot.com, y en Twitter @androidwireless.

¿Necesitas más ayuda para crear aplicaciones para Android? ¡Echa un vistazo a nuestros últimos libros y recursos!

Buy Android Wireless Application Development, 2nd Edition Buy Sam's Teach Yourself Android Application Development in 24 Hours Mamlambo code at Code Canyon

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.