Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 12 di 45
  • livello principiante
Indice lezioni

Tipi di dati: stringhe

I tipi fondamentali di un linguaggio di programmazione: le stringhe
I tipi fondamentali di un linguaggio di programmazione: le stringhe
Link copiato negli appunti

Come abbiamo visto in precedenza una delle maggiori influenze del linguaggio Ruby è il Perl e da questo eredita, tra l'altro, una potente e avanzata gestione del testo.

Le stringhe, sequenze di caratteri racchiusi tra virgolette (") o tra singoli apici ('), sono delle istanze della classe String. È previsto un avanzato sistema di accesso ai singoli caratteri delle stringhe attraverso il metodo []. Ad esempio possiamo accedere a qualsiasi carattere di una stringa indicandone semplicemente l'indice:

> str = "Ciao Mondo!"
=> "Ciao Mondo!"
> str.class
=> String
> str[0]
=> 67

viene restituito un intero che è il valore del codice ASCII corrispondente nel nostro caso al carattere "C". Per riconvertirlo in carattere si utilizza il metodo chr visto prima:

> str[0].chr
=> "C"

È possibile con [] anche accedere a sottostringhe:

> str[0..3]
=> "Ciao"
> str[0...3]
=> "Cia"
> str[0,4]
=> "Ciao"

Dove 0..3 e 0...3 sono dei range, le due cifre rappresentano gli estremi dell'intervallo da prendere in considerazione; se si utilizzano i tre punti (...) il secondo estremo viene escluso. Passando invece come argomenti due interi, ad esempio 0 e 4, estraiamo da str la sottostringa che inizia al carattere con indice 0 (la prima lettera della prima parola) e che ha lunghezza pari a 4 caratteri. Inserendo degli indici negativi il conteggio avviene invece dalla fine della stringa:

> str[-6..-1]
=> "Mondo!"
> str[-6,6]
=> "Mondo!"

Utilizzando una stringa come argomento viene restituito il valore nil se questa non è presente e la stringa stessa in caso contrario:

> str["Hello"]
=> nil
> str["Mondo"]
=> "Mondo"

Infine è possibile anche passare come argomento un'espressione regolare:

> str[/w+s/]
=> "Ciao "

torneremo in dettaglio sull'argomento in un prossimo capitolo. In alternativa a [] è possibile usare il metodo slice.

Analogo a [] è il metodo di assegnazione []=, l'ovvia differenza è che in questo caso viene eseguita un'assegnazione alla porzione di stringa determinata dall'argomento di []=. Anche in questo caso possono essere passati come argomenti un intero, due interi, un range, un'espressione regolare o una stringa:

> str = "Ciao Mondo!"
> str[4] = ","
> str[0..3] = "Hello"
> str[-6,5] = "World"
> str
=> "Hello,World!"

Vediamo infine alcuni utili metodi applicabili alle stringhe:

  • * moltiplica la nostra stringa
    • "Ciao " * 2 -> "Ciao Ciao "
  • + concatena due stringhe
    • "Ciao " + "Mondo" -> "Ciao Mondo"
  • capitalize restituisce una copia della stringa con il primo carattere maiuscolo
    • "ciao".capitalize -> "Ciao"
  •  downcase e upcase restituiscono rispettivamente una copia della stringa con tutte le lettere minuscole e con tutte le lettere maiuscole
    • "Ciao".upcase -> "CIAO"
    • "Ciao".downcase -> "ciao"
  • swapcase restituisce una stringa con il case dei caratteri invertito, minuscole al posto di maiuscole e viceversa
  • chop elimina l'ultimo carattere da una stringa
    • "Ciaon".chop -> "Ciao"
    • "Ciao".chop -> "Cia"
  • chomp elimina dalla fine della stringa l'elemento separatore passato come argomento, se invocato senza argomento rimuove i valori n, r o entrambi
    • "Ciaon".chomp -> "Ciao"
    • "Ciao".chomp -> "Ciao"
    • "Ciao".chomp("ao") -> "Ci"
  • sub e gsub sostituiscono rispettivamente la prima occorrenza e tutte le occorrenze dell'espressione regolare passata come primo argomento e lo sostituiscono con il valore del secondo argomento
    • "ciao mondo".gsub(/o/, '*') -> "cia* m*nd*"
    • "ciao mondo".sub(/o/, '*') -> "cia* mondo"
  • split divide la stringa in sottostringhe in conformità al delimitatore passato come argomento. Come delimitatore è possibile usare sia stringhe che espressioni regolari, il valore di default è il carattere bianco
    • "ciao mondo".split -> ["ciao", "mondo"]
    • "ciao mondo".split('o') -> ["cia", " m", "nd"]
  • tr prende due stringhe come argomenti e sostituisce i caratteri del primo argomento con i corrispondenti caratteri del secondo argomento
    • "ciao".tr("c", "m") -> "miao"
    • "ciao".tr('a-y', 'b-z') -> "djbp"

Altri metodi molto utili per la formattazione del testo sono strip, lstrip, rstrip, ljust, rjust e center. Sono metodi molto semplici e intuitivi vediamo solo qualche esempio veloce:

> "ciao".center(20)
=> "        ciao        "
> "ciao".ljust(20)
=> "ciao                "
> "ciao".rjust(20)
=> "                ciao"
"  ciao  ".lstrip
=> "ciao  "
"  ciao  ".rstrip
=> "  ciao"
> "  ciao  ".strip
=> "ciao"

Di quasi tutti i metodi visti in questo paragrafo ne esiste anche la versione distruttiva che, invece di restituire una copia della stringa opportunamente modificata, modifica direttamente la stringa originaria. Torneremo sulle stringhe nel capitolo sulle espressioni regolari.


Ti consigliamo anche