25 – metodi per stringhe
Vediamo ora una rassegna dei principali metodi per le stringhe, ovviamente per approfondimenti vedere la documentazione.
Una particolarità: tutti i metodi non andranno mai a modificare il valore originale della stringa, ma restituiranno una copia modificata della stessa.
Mi creo il br e la funzione writeIn per non ripetere ogni volta il codice
var br = "<br>"; function writeln(messaggio) { document.write(messaggio + br); }
var image = prompt("Inserire il nome di una immagine"); if (image.endsWith(".png")) { writeln("Immagini png non supportate"); }
endsWith (stringa) verifica se una stringa termina per la stringa passata come parametro. La funzione prompt è come un alert con l’input
if (image.includes("sex")) { writeln("Immagine probabilmente non appropriata ..."); }
includes(stringa[,posizione]) verifica se la stringa contiene la stringa parametro (sex). Restituisce true o false.
Opzionale la posizione:
var CF = "RSSMRT71R71D150H"; if (CF.includes("71", 9)) { writeln("Femmina, nata il 31 del mese di "); }
contiene il 71 a partire dalla posizione 9 della stringa del codice fiscale
var bitString = "1001010001110011"; if (bitString.indexOf("111", 8) > -1) { writeln("Dato corrotto"); }
indexOf: posizione di una stringa a partire da una certa posizione
writeln("Il primo bit a zero è in posizione " + bitString.indexOf("0"));
senza posizione di partenza la ricerca inizia da 0
writeln("Ultima coppia di bit a 1 alla posizione" + bitString.lastIndexOf("11"));
lastIndexOf come indexOf ma guarda per l’ultima occorrenza, nella variabile bitString = “1001010001110011” l’ultimo parametro 11 è alla posizione 14
writeln("101 trovato alla posizione " + bitString.lastIndexOf("101", 7));
fermandosi ad una certa posizione se indicata. Cerca il 101 ma fino alla posizione 7. Il risultato è posizione 3
//padEnd(lunghezza, stringa) se stringa viene omessa si usa lo spazio bitString = "".padEnd(16, "01"); //01010101... writeln(bitString);
padEnd : estende la stringa fino fino a raggiungere una massima lunghezza indicata nel primo parametro, di un valore riempitivo passato come secondo
for (var i = 1; i <= 100; i++) { writeln((i + "").padEnd(3, "-")); }
a
in questo esempio padEnd stampa di numeri a larghezza fissa con segnaposti, allunga fino a 3 cifre i numeri
1–
2–
10-
100
In maniera analoga il padStart , il riempitivo (lo zero) lo mette prima
for (var i = 1; i <= 100; i++) { writeln((i + "").padStart(3, "0")); }
001
002
010
100
bitString = "0".repeat(32); writeln(bitString); //32 bit a zero
Il repeat restituisce una stringa ripetendo n volte (32) quella di partenza
//replace(la_stringa, con_questa) SOLO LA PRIMA TROVATA var s = "Tutto quel che e' stato e' stato e quel che non e' a volte e'"; s = s.replace("e'", "è"); writeln(s); //solo la prima viene rimpiazzata..
replace sostituisce la stringa indicata come primo parametro ( e’ ) con quella indicata come secondo. Verra cambiata solo la prima occorrenza trovata e non tutte.
Per farlo su tutto bisogna usare le espressioni regolari
/replace(espressione regolare, con_questa) MOLTO PIU' FLESSIBILE //NB: case sensitive s = s.replace(/e'/g, "è"); //espressione regolare, g=global=tutte writeln(s);
Una possibilità di usare le regexp è quella di racchiudere l’espressione tra una coppia di forward slash . La g è il modificatore sull’azione del comando e sta per global , ovvero cerca in tutta la astringa
//search(espressione_regolare) posizione della prima occorrenza o -1 s = "Tutto quel che è stato è stato e quel che non è a volte è"; writeln("Ho trovato 'stato' alla posizione " + s.search("stato")); //17
search cerca la posizione della prima stringa passata come argomento
CF = "RSSMRT71R71D150H"; writeln("Caratteri nominativo: " + CF.slice(0, 6));
slice (inizio, fine) estrae una porzione di stringa
s = "Tutto quel che è stato è stato e quel che non è a volte è" var risultato = s.split(" "); //risultato è un array non un singolo valore for (var i = 0; i < risultato.length; i++) { writeln(risultato[i]); } //parole separate
split (separatore, limite) RESTITUISCE UN ARRAY!, per avere tutte le parole uso un ciclo for che come contatore usa l’indice [i] dell’array generato (risultato) e stampa per la lunghezza dell’array (risultato.lenght)
risultato = s.split(" ", 4); //max 4 porzioni nel risultato for (var i = 0; i < risultato.length; i++) { writeln(risultato[i]); } //parole separate
posso anche limitare il numero di spezzoni di stringa che vengono restituiti, indicandolo come secondo parametro (4).
Di seguito alcuni esempi di split con i commenti nel codice
risultato = s.split(""); //risultato è un array non un singolo valore for (var i = 0; i < risultato.length; i++) { writeln(risultato[i]); } //tutti i singoli caratteri
risultato = s.split("è"); //risultato è un array non un singolo valore for (var i = 0; i < risultato.length; i++) { writeln(risultato[i]); } //porzioni di stringa tra le è
risultato = s.split("stato"); //il separatore può essere una intera stringa for (var i = 0; i < risultato.length; i++) { writeln(risultato[i]); }
avevamo visto EndWith, ecco il simmetrico
//startsWith(stringa, posizione) CF = "FRRMRT71R71D150H"; if (CF.startsWith("FRR")) { writeln("E' un Ferrari"); }
startWith, inizia con FRR, nel codice fiscale, vuol dire che il cognome è Ferrari
s = " sono una stringa davvero spaziosa "; alert("#" + s.trim() + "#");
trim rimuove gli spazi all’inizio e alla fine di una stringa
alert("#" + s.trimLeft() + "#");
trimLeft rimuove gli spazi solo all’inizio
alert("#" + s.trimRight() + "#");
trimRight rimuove gli spazi solo alla fine