C# - Stringhe
C#
Le stringhe
- Per questioni di sicurezza, le stringhe sono oggetti in sola lettura. Quindi tutti i metodi non modificano la stringa, ma ne creano un'altra che può essere assegnata anche alla stringa stessa.
- La stringa è un array di char (Si veda il metodo ToCharArray()).
string s = "Pippo";
char c = s[0]; // c è il char 'P'
- Per inizializzare una stringa alla stringa vuota (due modi).
string stringaVuota2 = String.Empty;
- Come tutti gli array, una stringa può essere ciclata sia con un for, sia con un foreach:
foreach (char c in s)
{
Console.WriteLine(c);
}
for (int i = 0; i < s.Length; i++)
{
Console.WriteLine(s[i]);
}
- Inizializzare una stringa:
private string _mystring = string.Empty;
Length: Lunghezza
- Utilizzare il metodo 'Length'.
int l = s.Length;
- Prima di chiamare la proprietà, testare che la stringa non sia nulla o vuota:
Parte sinistra e parte destra di una stringa
- Il .Net non ha un modo nativo per recuperare la parte sinistra e la parte destra di una stringa.
- L’utilizzo del ‘Substring’ può dare un errore se la stringa è troppo corta.
- Con i due metodi statici seguenti non occorre controllare la lunghezza della stringa.
- Il primo parametro è la stringa sulla quale lavorare, il secondo è la lunghezza della sottostringa da ottenere.
- Se la stringa di partenza è troppo corta il risultato è la stringa stessa.
public static string Left(string str, int length)
{
str = (str ?? string.Empty);
return str.Substring(0, Math.Min(length, str.Length));
}
public static string Right(string str, int length)
{
str = (str ?? string.Empty);
return (str.Length >= length)
? str.Substring(str.Length - length, length)
: str;
}
ToLower, ToUpper: Minuscolo e maiuscolo
- Utilizzare i metodi 'ToLower', 'ToUpper' e 'UppercaseFirst':
string s1 = s.ToLower(); // s1 = "mentre tutto scorre"
string s2 = s.ToUpper(); // s1 = "MENTRE TUTTO SCORRE"
- Se occorre modificare per esempio solo la prima lettera, un metodo ottimizzato è:
{
if (string.IsNullOrEmpty(s))
{
return string.Empty;
}
char[] a = s.ToCharArray();
a[0] = char.ToUpper(a[0]);
return new string(a);
}
PadLeft, PadRight: Allineamento con carattere di riempimento
- Allineamento con i metodi PadLeft e PadRight:
string s1 = s.PadLeft(10); // " Gatto"
string s2 = s.PadLeft(10, '.'); // ".....Gatto"
string s3 = s.PadRight(10); // "Gatto "
string s4 = s.PadRight(10, '.'); // "Gatto....."
- Allineamento con il metodo Format:
- -10 indica di allineare il parametro a sinistra.
- 10 indica di allineare il parametro a destra.
- Si può copiare una stringa in un'altra:
string s2 = string.Copy(s1);
- In s2 c'è la stringa che c'è in s1.
Concat: Concatenazione
- Si possono concatenare le stringhe con il metodo 'Concat':
string result = string.Concat(s1, s1, s1, s1, s1, s1, s1, s1);
Join: Concatenazione con separatori
- Si possono concatenare le stringhe aggiungendo dei caratteri di separazione con il metodo 'Join':
string[] animali = new string[] { "armadillo", "rinoceronte", "grillotalpa" };
string s = string.Join("<br/>\r\n", animali);
- In s ci sono tre righe con i tre animali, i primi due seguiti da "<br>".
- Il metodo può essere utilizzato anche con liste; è necessario però convertire la lista in un char[].
città.Add("Milano");
città.Add("Torino");
città.Add("Venezia");
string s = string.Join(", ", città.ToArray());
- In s c'è la stringa "Milano, Torino, Venezia".
Primo metodo
- Per splittare una stringa è consigliata la rimozione degli elementi nulli. Il seguente codice restituisce un array con 4 elementi.
char[] arCharSep = new char[] { ' ', ',' };
string[] arParole = s.Split(arCharSep, StringSplitOptions.RemoveEmptyEntries);
Secondo metodo
- Si possono utilizzare le Regular Expression.
using System.Text.RegularExpressions;
string[] righe;
righe = Regex.Split(textBox1.Text, "\r\n");
Contains: Ricerca di sottostringhe
- Cerca la prima occorrenza di una sottostringa (restituisce True/False).
bool b = s.Contains("w");
- Restituisce False.
IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny: Ricerca di sottostringhe
- Cerca la prima occorrenza di una sottostringa (o di un carattere) nella stringa (restituisce la posizione o restituisce -1 se non trovata).
string s = "2001 Odissea nello spazio";
int i = s.IndexOf("Odi");
- Restituisce 5.
- Cerca la prima occorrenza di uno qualsiasi dei caratteri nella stringa (restituisce la posizione o restituisce -1 se non trovato nessun carattere).
char[] arChar = new char[] {'1', 'k'};
int i = s.IndexOfAny(arChar);
- Restituisce 3.
- Per compiere ricerche a partire dall'ultimo carattere verso il primo, utilizzare i metodi:
.LastIndexOfAny()
Substring, CopyTo, ToCharArray: Estrazione di sottostringhe
- Estrae una sottostringa.
string s = "2001 Odissea nello spazio";
string ss = s.Substring(5, 7);
- In ss c'è la stringa 'Odissea'.
- Copia una sottostringa (dal carattere 5 per 7 caratteri) in un array di char:
char[] arChar = new char[7];
s.CopyTo(5, arChar, 0, 7);
- In arChar[] ci sono i caratteri di 'Odissea'.
- Copia una stringa o una sottostringa in un array di char.
char[] arChar1 = s.ToCharArray();
- In arChar1[] ci sono i 25 caratteri della stringa s.
- In arChar2[] ci sono i caratteri di 'Odissea'.
- Verifica l'inizio o la fine di una stringa.
bool b1 = s.StartsWith("Blade");
bool b2 = s.EndsWith("runner", StringComparison.CurrentCultureIgnoreCase);
- In b1 e b2 c'è True.
- Sostituisce una sottostringa (o un carattere).
string s2 = s1.Replace("ss", "xx");
- In s2 c'è "2001 Odixxea nello spazio".
- Inserisce una stringa in una posizione.
string p = s.Insert(16, "leggerezza dell'");
- In p c'è la stringa "L'insostenibile leggerezza dell'essere".
- Rimuove una stringa da una posizione per un certo numero di caratteri.
string p = s.Remove(3, 2);
- In p c'è la stringa "01256789".
- Confronti True/False.
string s2 = "abc";
bool b1 = s1.Equals(s2); // Restituisce True
bool b2 = (s1 == s2); // Restituisce True
- Confronti Maggiori/Minori/Uguali.
int i2 = string.Compare("abc", "bcd"); // Restituisce -1: prima stringa inferiore della seconda
int i3 = string.Compare("bcd", "abc"); // Restituisce 1: prima stringa superiore della seconda
int i = s1.CompareTo(s2); // Restituisce 0, -1, 1
Left e Right: Parte sinistra e parte destra
- Per estrarre la parte sinistra e la parte destra di una stringa in sicurezza (evitando una eccezione), utilizzare le seguenti funzioni:
public static string Left(string str, int length)
{
str = (str ?? string.Empty);
return str.Substring(0, Math.Min(length, str.Length));
}
public static string Right(string str, int length)
{
str = (str ?? string.Empty);
return (str.Length >= length)
? str.Substring(str.Length - length, length)
: str;
}