Está en la página 1de 21

Cadenas en C#

Los objetos de cadena son inmutables, lo que significa que no se pueden cambiar una vez creados. Los mtodos que actan sobre las cadenas, devuelven los nuevos objetos de cadena. Una cadena se considera un tipo de datos tanto en java (String) y C# (string y String) que puede tener la habilidad de contener diferentes tipos de datos como: char, double, int, entre otros.
1 string nombre = 2 int edad = 22; 3 string cadena = "Nombre: " + nombre + " Edad: " + edad; "Luis Alberto Ochoa";

Tipo de dato string


El tipo de dato string que nos ofrece C# no es primitivo puesto que hace referencia a la clase String, esto quiere decir que C# reconoce la palabra clave string y la traslada a la clase System.String incluyendo las operaciones como la secuencia y copia de cadenas. view source print?
01 using System; 02 03 namespace Cadenas 04 { 05 06 07 08 09 10 11 12 13 14 15 16 } $ gmcs Cadena.cs $ mono Cadena.exe Hola mundo!!! } } System.Console.WriteLine(saludo); class Cadena { public static void Main(string[] args) { string hola = "Hola "; string mundo = "mundo!!!"; string saludo = hola + mundo;

System.String

La clase String esta diseada especficamente para almacenas cadenas y permitir un gran nmero de operaciones dentro de una cadena. Para realizar alguna tareas comunes la clase String contiene 19 mtodos: Puedes probar los ejemplos con tan solo copiar el cdigo dentro del mtodo Main. 1. Compare Compara el contenido de las cadenas tomando en cuenta la configuracin local (Culture) view source print?
1 // Compare 2 string cadena1 = "Hola"; 3 string cadena2 = "hola"; 4 5 if (String.Compare(cadena1, cadena2) == 0) 6 7 else 8 Console.WriteLine("Las cadenas son distintas"); Las cadenas son distintas Console.WriteLine("Las cadenas son iguales");

2. CompareOrdinal Compara las cadenas sin tomar en cuenta la configuracin local (Culture) view source print?
1 // Cadenas 2 string cadena1 = "Hola"; 3 string cadena2 = "hola"; 4 5 // CompareOrdinal 6 if (String.CompareOrdinal(cadena1, cadena2) == 0) 7 Console.WriteLine("Las cadenas son iguales"); 8 else 9 Console.WriteLine("Las cadenas son distintas"); Las cadenas son distintas

3. Concat Combina varias instancias de cadenas separadas en una misma instancia. view source

print?
1 // Cadenas 2 string cadena1 = "Hola"; 3 string cadena2 = "Mundo"; 4 string espacio = " "; 5 6 // Concat 7 string cadena3 = String.Concat(cadena1, espacio, cadena2); 8 Console.WriteLine(cadena3); Hola Mundo

4. CopyTo Copia un nmero de caracteres dentro de una nueva instancia. view source print?
1 // Cadenas 2 string cadena = "Hola Mundo!"; 3 char[] arreglo = new char[4]; 4 5 // CopyTo 6 cadena.CopyTo(0, arreglo, 0, 4); 7 Console.WriteLine(arreglo); Hola

5. Format Nos permite dar formato a una cadena que contenga varios valores. view source print?
01 // Valor 02 int valor = 50; 03 04 // Format 05 Console.WriteLine(String.Format("Decimal: {0:D}", valor)); Console.WriteLine(String.Format("Dolares: {0:$#,##0.00 USD}", valor)); 07 Console.WriteLine(String.Format("Exponencial: {0:E}", valor)); 06 08 Console.WriteLine(String.Format("General: {0:G}", valor)); 09 Console.WriteLine(String.Format("Hexadecimal: {0:X}", valor));

10 Console.WriteLine(String.Format("Moneda: {0:C}", valor)); 11 Console.WriteLine(String.Format("Porcentaje: {0:P}", valor)); Dolares: $50.00 USD Exponencial: 5.000000E+001 General: 50 Hexadecimal: 32 Moneda: $50.00 Porcentaje: 5,000.00%

6. IndexOf Nos permite conocer la posicin inicial de una cadena. view source print?
1 // Cadena 2 string cadena = "Hola Mundo!"; 3 4 // IndexOf Console.WriteLine("La cadena 'Mundo' comienza en la posicin {0:D}", 5 cadena.IndexOf("Mundo") + 1); La cadena 'Mundo' comienza en la posicin 6

Hay que recordar que los arreglos comienzan en 0, es por eso que incrementamos 1: view source print?
1 cadena.IndexOf("Mundo") + 1

7. IndexOfAny Nos permite conocer la posicin inicial de cualquier cadena especificada. view source print?
1 // Cadena 2 string cadena1 = "Hola Mundo!"; 3 string cadena2 = "No todo es como Java"; 4 char[] arreglo = new char[] {'M', 't'}; 5 6 // IndexOfAny Console.WriteLine("La letra 'M' o 't' se encuentra en la posicin 7 {0:D}", cadena1.IndexOfAny(arreglo) + 1); Console.WriteLine("La letra 'M' o 't' se encuentra en la posicin 8 {0:D}", cadena2.IndexOfAny(arreglo) + 1); La letra 'M' o 't' se encuentra en la posicin 6 La letra 'M' o 't' se encuentra en la posicin 4

8. Insert Inserta una cadena dentro de otra. view source print?


1 // Cadena 2 string cadena = "Hola C-Sharp"; 3 4 // Insert 5 Console.WriteLine(cadena.Insert(12, ", ya no te pareces a Java")); Hola C-Sharp, ya no te pareces a Java

9. Join Construye una sola cadena a partir de arreglos. view source print?
1 // Cadena 2 string[] cadena = {"C/C++", "C#", "Java", "PHP"}; 3 4 // Join Console.WriteLine("Lenguajes de programacin: {0}", String.Join(", ", 5 cadena)); Lenguajes de programacin: C/C++, C#, Java, PHP

10. LastIndexOf Nos permite conocer la ltima posicin de una cadena. view source print?
1 // Cadena 2 string cadena = "Hola Mundo! Hola C-Sharp"; 3 4 // LastIndexOf Console.WriteLine("La ltima palabra 'Hola' esta en la posicin: 5 {0}", cadena.LastIndexOf("Hola") + 1); La ltima palabra 'Hola' esta en la posicin: 13

11. LastIndexOfAny Nos permite conocer la ltima posicin de cualquier cadena. view source print?

1 // Cadena 2 string cadena1 = "Hola Mundo, Hola C#"; 3 string cadena2 = "No todo es como Java"; 4 char[] arreglo = new char[] {'H', 't'}; 5 6 // LastIndexOfAny Console.WriteLine("La ltima letra 'H' o 't' se encuentra en la 7 posicin {0:D}", cadena1.LastIndexOfAny(arreglo) + 1); Console.WriteLine("La ltima letra 'H' o 't' se encuentra en la 8 posicin {0:D}", cadena2.LastIndexOfAny(arreglo) + 1); La ltima letra 'H' o 't' se encuentra en la posicin 13 La ltima letra 'H' o 't' se encuentra en la posicin 4

12. PadLeft Agrega espacios del lado izquierdo tomando en cuenta la longitud de la cadena. view source print?
1 // Cadena 2 string cadena = "Hola Mundo"; 3 4 cadena = cadena.PadLeft(12); 5 Console.WriteLine("~" + cadena); ~ Hola Mundo

13. PadRight Agrega espacios del lado derecho tomando en cuenta la longitud de la cadena. view source print?
1 // Cadena 2 string cadena = "Hola Mundo"; 3 4 cadena = cadena.PadRight(12); 5 Console.WriteLine(cadena + "~"); Hola Mundo ~

14. Replace Remplaza una cadena completa. view source print?


1 // Cadena

2 string cadena = "Hola Java!"; 3 4 // Replace 5 Console.WriteLine(cadena.Replace(cadena, "Hola C#")); Hola C#

15. Split Separa una cadena y la regresa en un arreglo del tipo string. view source print?
01 // Cadenas 02 string cadena = "C, C++, C#, Java, PHP y Objective-C"; 03 char[] separadores = new char[] {',', 'y'}; 04 05 // Split 06 string[] arreglo = cadena.Split(separadores); 07 08 foreach (string lista in arreglo) 09 { 10 Console.WriteLine(lista); 11 } C C++ C# Java PHP Objective-C

16. Substring Extrae un fragmento a partir de cierta posicin. view source print?
1 // Cadena 2 string cadena = "Gracias a todo el equipo de Mono-Project"; 3 4 // Substring 5 Console.WriteLine(cadena.Substring(28, 4)); Mono

17. ToLower Convierte toda la cadena en minsculas.

view source print?


1 // Cadena 2 string cadena = "C, C++, C#, Java, PHP y Objective-C"; 3 4 // ToLower 5 Console.WriteLine(cadena.ToLower()); c, c++, c#, java, php y objective-c

18. ToUpper Convierte toda la cadena en maysculas. view source print?


1 // Cadena 2 string cadena = "C, C++, C#, Java, PHP y Objective-C"; 3 4 // ToUpper 5 Console.WriteLine(cadena.ToUpper()); C, C++, C#, JAVA, PHP Y OBJECTIVE-C

19. Trim Elimina los espacios en blanco de los costados de una cadena. view source print?
1 // Cadena 2 string cadena = " 3 4 // Trim 5 Console.WriteLine(cadena); 6 Console.WriteLine(cadena.Trim()); C, C++, C#, Java, PHP y Objective-C C, C++, C#, Java, PHP y Objective-C C, C++, C#, Java, PHP y Objective-C ";

Funciones String Left, Right and Mid en c#


Emular eso en .net:
public class StringManager { public static string Left(string text, int length) { return text.Substring(0,length);

} public static string Right(string text, int length) { return text.Substring(text.Length -length, length); } public static string Mid(string text, int start, int end) { return text.Substring(start, end); } public static string Mid(string text, int start) { return text.Substring(start, text.Length - start); } }

http://geekswithblogs.net/congsuco/archive/2005/07/07/45607.aspx

Prctica N 3: Contar vocales


Programacin | September 9th Elaborar un programa en Java que permita contar las vocales de una frase. La frase a utilizar para probar el programa es la siguiente: No nos atrevemos a muchas cosas porque son difciles, pero son difciles porque no nos atrevemos a hacerlas.
view source print?
01 package org.luisalberto.laboratorio.practica3; 02 03 public class Vocales { 04 05 06 07 /* Frase a analizar */ public static void main(String[] args) {

String frase = "No nos atrevemos a muchas cosas 08 porque son difciles, pero son difciles porque no nos atrevemos a hacerlas.";

09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 switch(letra) { do { letra = frase.charAt(indice); /* * Al obtener la letra la almacenamos en * la variable letra para compararla. */ char letra; /* * Declaramos e iniciamos el indice * que recorrer la cadena */ int indice = 0; /* * Obtenemos la longitud de la cadena */ int longitud = frase.length(); /* * Declaramos e iniciamos las variables * para contar las vocales */ int a, e, i, o, u; a = e = i = o = u = 0;

38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

case 'a': case '': a++; break; case 'e': case '': e++; break; case 'i': case '': i++; break; case 'o': case '': o++; break; case 'u': case '': u++; break; default: break; }

indice++; }while(indice < longitud);

System.out.println("Cantidad de letras 'a' en la frase: " + a); System.out.println("Cantidad de letras 'e' en la

frase: " + e); 67 68 69 70 71 72 } $ javac -d . Vocales.java $ java org.luisalberto.laboratorio.practica3.Vocales Cantidad de letras 'a' en la frase: 8 Cantidad de letras 'e' en la frase: 10 Cantidad de letras 'i' en la frase: 6 Cantidad de letras 'o' en la frase: 12 Cantidad de letras 'u' en la frase: 3 System.out.println("Cantidad de letras 'i' en la frase: " + i); System.out.println("Cantidad de letras 'o' en la frase: " + o); System.out.println("Cantidad de letras 'u' en la frase: " + u); }

Si encuentras algo malo en la descripcin de mi algoritmo no dudes en ayudarme a corregirlo.


Utilizar cadenas (Gua de programacin de C#)

Una cadena de C# es una matriz de caracteres que se declara utilizando la palabra clave string. Un literal de cadena se declara utilizando las comillas, como se muestra en el siguiente ejemplo:
VB C# C++ F# JScript Copiar
string s = "Hello, World!";

Puede extraer subcadenas y concatenar cadenas de la siguiente manera:


VB C# C++

F# JScript Copiar
string s1 = "orange"; string s2 = "red"; s1 += s2; System.Console.WriteLine(s1); s1 = s1.Substring(2, 5); System.Console.WriteLine(s1); // outputs "orangered" // outputs "anger"

Los objetos de cadena son inmutables, lo que significa que no se pueden cambiar una vez creados. Los mtodos que actan sobre las cadenas, devuelven los nuevos objetos de cadena. En el ejemplo anterior, cuando el contenido de s1 y s2 se concatenan para formar una sola cadena, las dos cadenas que contienen "orange" y "red" no se modifican. El operador += crea una nueva cadena que contiene el contenido combinado. Como resultado, s1 ahora hace referencia a una cadena totalmente diferente. Todava existe una cadena que slo contiene "orange" , pero deja de hacerse referencia a ella cuando se concatena s1.
Nota

Tenga cuidado cuando cree referencias a cadenas. Si crea una referencia a una cadena y despus "modifica" la cadena, la referencia seguir sealando al objeto original y no al nuevo objeto que se cre cuando se modific la cadena. Esta situacin peligrosa se ilustra en el cdigo siguiente:
Copiar
string s1 = "Hello"; string s2 = s1; s1 += " and goodbye."; Console.WriteLine(s2); //outputs "Hello"

Dado que las modificaciones en las cadenas implican la creacin de nuevos objetos de tipo string, por motivos de rendimiento, la concatenacin de un gran nmero de cadenas u otro tipo de manipulacin de las cadenas debe realizarse con la clase StringBuilder, como se muestra a continuacin:
VB C# C++ F# JScript Copiar

System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("one "); sb.Append("two "); sb.Append("three"); string str = sb.ToString();

La clase StringBuilder se describe con mayor detalle en la seccin "Utilizar Stringbuilder".

Trabajar con cadenas


Carcter de escape Los caracteres de escape como "\n" y (nueva lnea) y "\t" (tabulador) se pueden incluir en cadenas. La lnea:
VB C# C++ F# JScript Copiar
string hello = "Hello\nWorld!";

equivale a:
Hello World!

Si desea incluir una barra diagonal inversa, sta debe estar precedida de otra barra diagonal inversa. La cadena siguiente:
VB C# C++ F# JScript Copiar

string filePath = "\\\\My Documents\\";

equivale a:
\\My Documents\

El smbolo @ El smbolo @ indica al constructor de cadena que debe omitir caracteres de escape y saltos de lnea. Las dos cadenas siguientes son, por consiguiente, idnticas:
VB C# C++ F# JScript Copiar
string p1 = "\\\\My Documents\\My Files\\"; string p2 = @"\\My Documents\My Files\";

ToString() Al igual que todos los objetos derivados de Object, las cadenas proporcionan el mtodo ToString, que convierte un valor en una cadena. Este mtodo se puede utilizar para convertir valores numricos en cadenas de la siguiente manera:
VB C# C++ F# JScript Copiar
int year = 1999; string msg = "Eve was born in " + year.ToString(); System.Console.WriteLine(msg); // outputs "Eve was born in 1999"

Tener acceso a los caracteres individuales

Se obtiene acceso a los caracteres individuales contenidos en una cadena utilizando mtodos como SubString(), Replace(),, Split() y Trim().
VB C# C++ F# JScript Copiar
string s3 = "Visual C# Express"; System.Console.WriteLine(s3.Substring(7, 2)); System.Console.WriteLine(s3.Replace("C#", "Basic")); "Visual Basic Express" // outputs "C#" // outputs

Tambin es posible copiar los caracteres en una matriz de caracteres, tal como se muestra a continuacin:
VB C# C++ F# JScript Copiar
string s4 = "Hello, World"; char[] arr = s4.ToCharArray(0, s4.Length); foreach (char c in arr) { System.Console.Write(c); }

// outputs "Hello, World"

Puede obtener acceso a los caracteres individuales de una cadena con un ndice:
VB C# C++ F#

JScript Copiar
string s5 = "Printing backwards"; for (int i = 0; i < s5.Length; i++) { System.Console.Write(s5[s5.Length - i - 1]); "sdrawkcab gnitnirP" }

// outputs

Cambiar maysculas y minsculas Para cambiar las letras en una cadena a maysculas o minsculas, se utiliza ToUpper() o ToLower(), de la siguiente forma:
VB C# C++ F# JScript Copiar
string s6 = "Battle of Hastings, 1066"; System.Console.WriteLine(s6.ToUpper()); HASTINGS 1066" System.Console.WriteLine(s6.ToLower()); hastings 1066" // outputs "BATTLE OF // outputs "battle of

Comparaciones La manera ms simple de comparar dos cadenas es utilizar los operadores == y !=, que realizan una comparacin con distincin entre maysculas y minsculas.
VB C# C++ F# JScript Copiar
string color1 = "red";

string color2 = "green"; string color3 = "red"; if (color1 == color3) { System.Console.WriteLine("Equal"); } if (color1 != color2) { System.Console.WriteLine("Not equal"); }

Los objetos String tambin tienen un mtodo CompareTo() que devuelve un valor entero, basado en si una cadena es menor que (<) o mayor que (>) otra. Al comparar las cadenas, se utiliza el valor Unicode, y las minsculas tienen un valor menor que las maysculas.
VB C# C++ F# JScript Copiar
string s7 = "ABC"; string s8 = "abc"; if (s7.CompareTo(s8) > 0) { System.Console.WriteLine("Greater-than"); } else { System.Console.WriteLine("Less-than"); }

Para buscar una cadena dentro de otra, utilice IndexOf(). IndexOf() devuelve -1 si la cadena de bsqueda no se encuentra; en caso contrario devuelve el ndice de la primera posicin de la cadena, con base cero.
VB C# C++ F# JScript

Copiar
string s9 = "Battle of Hastings, 1066"; System.Console.WriteLine(s9.IndexOf("Hastings")); System.Console.WriteLine(s9.IndexOf("1967")); // outputs 10 // outputs -1

Dividir una cadena en subcadenas Dividir una cadena en subcadenas (al igual que dividir una frase en palabras) es una tarea comn de programacin. El mtodo Split() toma una matriz de char de delimitadores (por ejemplo, un carcter de espacio) y devuelve una matriz de subcadenas. Para obtener acceso a esta matriz con foreach:
VB C# C++ F# JScript Copiar
char[] delimit = new char[] { ' ' }; string s10 = "The cat sat on the mat."; foreach (string substr in s10.Split(delimit)) { System.Console.WriteLine(substr); }

Este cdigo genera cada palabra en una lnea separada de la siguiente forma:
The cat sat on the mat.

Cadenas nulas y cadenas vacas Una cadena vaca es una instancia de un objeto System.String que contiene cero caracteres. Las cadenas vacas se utilizan habitualmente en distintos escenarios de programacin para representar un campo de texto en blanco. Puede realizar llamadas a

mtodos en cadenas vacas porque son objetos System.String vlidos. Las cadenas vacas se inicializan del modo siguiente:
Copiar
string s = "";

Por el contrario, una cadena nula no hace referencia a una instancia de un objeto System.String y cualquier intento de llamar a un mtodo en una cadena nula produce una excepcin NullReferenceException. Sin embargo, puede utilizar cadenas nulas en operaciones de concatenacin y comparacin con otras cadenas. Los ejemplos siguientes muestran algunos casos en los que se hace referencia a una cadena nula y no se produce una excepcin:
Copiar
string str = "hello"; string nullStr = null; string emptyStr = ""; string tempStr = str + nullStr; // tempStr = "hello" bool b = (emptyStr == nullStr);// b = false; emptyStr + nullStr = ""; // creates a new empty string int I = nullStr.Length; // throws NullReferenceException

Utilizar StringBuilder
La clase StringBuilder crea un bfer de cadena que proporciona el mejor rendimiento si el programa realiza una gran manipulacin de cadenas. La cadena StringBuilder tambin permite reasignar los caracteres individuales, algo que el tipo de datos de cadena integrado no admite. Por ejemplo, este cdigo cambia el contenido de una cadena sin crear una nueva cadena:
VB C# C++ F# JScript Copiar
System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet"); sb[0] = 'C'; System.Console.WriteLine(sb.ToString()); System.Console.ReadLine();

En este ejemplo, se utiliza un objeto StringBuilder para crear una cadena a partir de un conjunto de tipos numricos:
VB C# C++ F# JScript Copiar
class TestStringBuilder { static void Main() { System.Text.StringBuilder sb = new System.Text.StringBuilder(); // Create a string composed of numbers 0 - 9 for (int i = 0; i < 10; i++) { sb.Append(i.ToString()); } System.Console.WriteLine(sb); // displays 0123456789 // Copy one character of the string (not possible with a System.String) sb[0] = sb[9]; System.Console.WriteLine(sb); } } // displays 9123456789

Para obtener ms informacin