JavaScript/Oggetto String

Indice del libro

L'oggetto String permette di effettuare numerose operazioni sulle stringhe quali ricerca, isolamento di un carattere e altro ancora.

Costruttore

modifica

Per creare un nuovo oggetto della classe String usiamo la sintassi:

var nome_variabile = new String(stringa);

Il costruttore prende come parametro la stringa che sarà manipolata nel corso dello script.

L'oggetto String è un po' particolare, in quanto, come vi sarete già accorti, corrisponde ad un "doppione" del tipo di dato primitivo stringa, analizzato precedentemente nel corso del libro.
Dal momento che JavaScript effettua automaticamente la conversioni dei dati quando necessario, la differenza è dal punto di vista pratico, in quanto:

  • se creiamo una stringa con la normale sintassi
var variabile = "testo";
e successivamente volessimo trattarla come un oggetto String usando metodi o proprietà della classe String, JavaScript converte automaticamente la stringa in un oggetto String
  • se abbiamo un oggetto String e volessimo recuperare la sua stringa, JavaScript converte automaticamente l'oggetto String in una stringa contenente la stringa indicata nel costruttore.

Proprietà

modifica

L'oggetto String dispone di una proprietà rilevante, la proprietà length che restituisce il numero di caratteri contenuti in una stringa:

var esempio = "Sono una stringa primitiva"
alert (esempio.length); //restituisce 26

Nell'esempio appena visto, nella seconda riga la variabile esempio viene convertita in un oggetto String per accedere alla proprietà length.
Sempre per quanto appena detto, potremmo semplicemente scrivere:

alert ("Sono una stringa primitiva".length); //restituisce 26

I metodi della classe String permettono di eseguire molteplici operazioni sulle stringhe; si noti che questi metodi lavorano sulla stringa contenuta nell'oggetto ma restituiscono il valore desiderato senza modificare il valore dell'oggetto stringa.

toLowerCase() e toUpperCase()

modifica

Questi due metodi restituiscono la stringa forzando la capitalizzazione o tutta minuscola o tutta minuscola. Attenzione:

var t1 = new String ("TeStO");
var t2 = t1.toLowerCase() //restituisce "testo"
var t3 = t1.toUpperCase() //Restituisce "TESTO"
// attenzione: alla fine di questo codice la variabile t1 contiene ancora "TeStO"!

charAt() e charCodeAt()

modifica

Il metodo charAt() restituisce il carattere della stringa che si trova alla posizione specificata; il primo carattere è identificato dalla posizione 0. Ad esempio:

var testo = prompt("Inserisci un testo", "Hello, world!");
var primoCarattere = testo.charAt(0);
var quartoCarattere = testo.charAt(3);
var ultimoCarattere = testo.charAt(testo.length - 1);

Questo semplice codice estrapola dalla stringa fornita in input dall'utente l'ultimo carattere. Per fare ciò recupera il carattere alla posizione testo.length - 1: infatti, dal momento che il conteggio dei caratteri parte da 0, nel caso di "Hello, world!" avremo queste posizioni:

0 1 2 3 4 5 6 7 8 9 10 11 12
H e l l o , w o r l d !

Quindi, essendo la stringa sia composta da 13 caratteri, l'ultimo si trova alla posizione 12, ovvero 13-1.

Il metodo charCodeAt() funziona come charAt() ma invece di restituire il carattere alla posizione specificata, restituisce il suo codice ASCII. Ad esempio:

var testo = "Hello, world!";
alert( testo.charCodeAt(1) ); //mostra il codice ASCII del carattere "e", ovvero 101

fromCharCode()

modifica

Il metodo fromCharCode() è l'opposto di charCodeAt(): infatti prende come argomento un numero qualsiasi di numeri che vengono interpretati come codici Ascii e trasformati in una stringa.
Questo metodo è però un po' particolare, in quanto non necessita di lavorare su un oggetto String; per questo viene detto statico. Per utilizzare il metodo sarà sufficiente usare la sintassi:

String.fromCharCode(parametri);

facendo cioè riferimento alla classe String.
Vediamo un esempio:

 var stringa;
for (codice = "0".charCodeAt(0); codice <= "9".charCodeAt(0); codice ++ ) {
 stringa = stringa + String.fromCharCode(codice);
}

Questo semplice snippet scorre dal codice del carattere "0" a quello del carattere "9" creando così la stringa:

0123456789

indexOf() e lastIndexOf()

modifica

Uno dei metodi dell'oggetto String che useremo più di frequente sarà indexOf() la cui sintassi è:

oggetto_string.indexOf(search, start);

In pratica, il metodo cerca nella stringa la prima occorrenza della sottostringa search e ne restituisce la posizione (a partire da 0); se la stringa non viene trovata, restituisce -1. Il parametro opzionale start specifica la posizione dalla quale iniziare la ricerca (di default è 0). Ad esempio;

var stringa = "Ma la volpe col suo balzo ha raggiunto il quieto fido" //ricordiamoci che JS converte automaticamente le stringhe
var posiz = stringa.indexOf("v"); //contiene il valore 6)
var posiz2 = stringa.indexOf("k"); // restituisce -1

Il metodo lastIndexOf() funziona analogamente ad indexOf() ma inizia la ricerca dalla fine della stringa e non dall'inizio

substr()

modifica

Il metodo substr() presenta la sintassi:

nome_oggetto_string.substr(start, length)

Il metodo estrae dalla stringa indicata una sottostringa a partire dalla posizione indicata dal parametro start un numero length di caratteri. Se quest'ultimo parametro non è specificato, il metodo include anche tutti i caratteri a partire da quello iniziale fino alla fine della stringa. Ad esempio:

var stringa = "Questo è un esempio";
var str2 = stringa.substr(0, 6); //restituisce "Questo"
var str3 = stringa.substr(7); //restituisce "è un esempio"

replace()

modifica

Il metodo replace() restituisce la stringa iniziale sostituendo alla prima occorrenza della stringa indicata come primo parametro quella fornita come secondo. Ad esempio:

var s = "L'utente Pinco ha modificato questa pagina"
var s2 = s.replace("Pinco", "Pallino");
//s2 ora contiene "L'utente Pallino ha modificato questa pagina"
//s contiene ancora "L'utente Pinco ha modificato questa pagina"

Se si desidera sostituire tutte le occorrenze si può usare questa funzione:

function replace (str, first, last) {
    while (str.indexOf(first) != -1) {
        str = str.replace(first, last);
    }
    return str;
}

con la sintassi replace('torta', 't', 'f') (che restituisce "forfa"). Oppure si può usare un'espressione regolare:

var s = "L'utente Pinco ha modificato questa Pinco pagina"
var s2 = s.replace(/Pinco/g, "Pallino");
//s2 ora contiene "L'utente Pallino ha modificato questa Pallino pagina"
//s contiene ancora "L'utente Pinco ha modificato questa Pinco pagina"

split()

modifica

Il metodo split() viene presentato ora in quanto fa parte della classe String, ma il suo uso richiede la conoscenza degli array, che verranno esaminati più avanti nel corso del libro, basti sapere che un array è una sorta di contenitore di variabili.
La sintassi è:

stringa.split(separatore);

Il metodo restituisce un array contenente le diverse sottostringhe in cui la stringa è divisa dal separatore. Ad esempio:

"a,e,i,o,u".split(","); //restituisce "a", "e", "i", "o", "u"
"a,e,i,o,u,".split(","); //attenzione: restituisce "a", "e", "i", "o", "u", ""

Esercizi

modifica
  • Scrivere una funzione che conti le occorrenze di una sottostringa in una stringa (ad esempio se vengono passati come parametri "raffaele" e "a" deve restituire 2, ma se si inseriscono "raffaele" e "ff" deve restituire 1.
  • Creare una funzione che fornisca la sottostringa di una stringa data compresa tra due altre sottostringhe, a partire da sinistra. Ad esempio, dati come parametri una@bella&stringa, "@" e "&", restituisca "bella".