JavaScript/Oggetto String
L'oggetto String permette di effettuare numerose operazioni sulle stringhe quali ricerca, isolamento di un carattere e altro ancora.
Costruttore
modificaPer 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à
modificaL'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
Metodi
modificaI 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()
modificaQuesti 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()
modificaIl 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()
modificaIl 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()
modificaUno 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()
modificaIl 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()
modificaIl 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()
modificaIl 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.
function subStrCount (string, subString) {
var stringa = string, count = 0;
while (stringa.indexOf(subString) != -1) {
stringa = stringa.replace(subString, "");
count++;
}
return count;
}
replace()
; poi sottrae la lunghezza della stringa principale a quella della stringa appena ottenuta; in questo modo si ottiene il numero di caratteri occupati dalla sottostringa che, divisi per la sua lunghezza, ne danno il numero di occorrenze.- 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"
.
function substrChr (string, chr1, chr2) {
chr1Pos = string.indexOf(chr1);
chr2Pos = string.indexOf(chr2);
return string.substr(chr1Pos +1, chr2Pos - chr1Pos - 1);
}