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