Pagina personale di:
Carlo Vecchio
appunti di C#, R, SQL Server, ASP.NET, algoritmi, numeri
Vai ai contenuti

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 stringaVuota1 = "";
   
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'.

   string s = "0123456789";
   int l = s.Length;


  • Prima di chiamare la proprietà, testare che la stringa non sia nulla o vuota:

   if (!string.IsNullOrEmpty(s))

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 s = "mEnTrE tUtTo ScOrRe";
   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 è:

   static string UppercaseFirst(string s)
   {
       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 s = "Gatto";
   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:

   string s = string.Format("{0,-10} {1,10}", 100, 5);  // "100                5"

  • -10 indica di allineare il parametro a sinistra.
  • 10 indica di allineare il parametro a destra.

Copy: Copia
  • Si può copiare una stringa in un'altra:

   string s1 = "2001 Odissea nello spazio";
   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 s1 = "Hello world! ";
   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[].

   List<string> città = new List<string>();
   città.Add("Milano");
   città.Add("Torino");
   città.Add("Venezia");
   string s = string.Join(", ", città.ToArray());

  • In s c'è la stringa "Milano, Torino, Venezia".

Split: da stringa ad array di caratteri
Primo metodo
  • Per splittare una stringa è consigliata la rimozione degli elementi nulli. Il seguente codice restituisce un array con 4 elementi.

   string s = "2001 Odissea   nello spazio";
   
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).

   string s = "2001 Odissea nello spazio";
   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).

   string s = "2001 Odissea nello spazio";
   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:

   .LastIndexOf()
   .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:

   string s = "2001 Odissea nello spazio";
   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.

   string s = "2001 Odissea nello spazio";
   char[] arChar1 = s.ToCharArray();

  • In arChar1[] ci sono i 25 caratteri della stringa s.

   char[] arChar2 = s.ToCharArray(5, 7);

  • In arChar2[] ci sono i caratteri di 'Odissea'.

StartsWith, EndsWith: Verifica se una stringa inizia o finisce come un'altra stringa
  • Verifica l'inizio o la fine di una stringa.

   string s = "Blade Runner";
   bool b1 = s.StartsWith("Blade");
   bool b2 = s.EndsWith("runner", StringComparison.CurrentCultureIgnoreCase);


  • In b1 e b2 c'è True.

Replace: Sostituzione di caratteri e sottostringhe
  • Sostituisce una sottostringa (o un carattere).

   string s1 = "2001 Odissea nello spazio";
   string s2 = s1.Replace("ss", "xx");


  • In s2 c'è "2001 Odixxea nello spazio".

Insert: Inserimento di una stringa in un'altra
  • Inserisce una stringa in una posizione.

   string s = "L'insostenibile essere";
   string p = s.Insert(16, "leggerezza dell'");


  • In p c'è la stringa "L'insostenibile leggerezza dell'essere".

Remove: Rimozione di una stringa da un'altra
  • Rimuove una stringa da una posizione per un certo numero di caratteri.

   string s = "0123456789";
   string p = s.Remove(3, 2);

  • In p c'è la stringa "01256789".

Equals, Compare, CompareTo: Confronto tra stringhe
  • Confronti True/False.

   string s1 = "abc";
   string s2 = "abc";
   bool b1 = s1.Equals(s2);    // Restituisce True
   bool b2 = (s1 == s2);       // Restituisce True


  • Confronti Maggiori/Minori/Uguali.

   int i1 = string.Compare("abc", "abc");   // Restituisce 0: stringhe 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;
   }



© 2020 Carlo Vecchio
Torna ai contenuti