Ho una domanda interessante su stringa e delimitatori.
C'è una stringa casuale str
.
Ci sono alcuni simboli (o sequenze di simboli) che sono predefiniti e dovrebbero essere temporaneamente sostituiti all'interno di quella stringa dalla funzione replace
.
L'operazione dovrebbe essere simile alla sostituzione javascript
- Step1:
var str1 = str.replace(/abc/g, 'newchar1').replace(/,/g, 'newchar2');
// che sostituisce abc
occorrenze e virgole con newchar1
e newchar2
rispettivamente.
- Fase 2:
Dopo alcuni calcoli faccio le sostituzioni "inverse" facendo
str1.replace(/newchar1/g, 'abc').replace(/newchar2/g, ',');
e si aspetta di avere lo stesso numero di abc e virgole e nelle stesse posizioni di prima di qualsiasi cambiamento.
Come hai capito, ci sono problemi con questo metodo:
newchar1 potrebbe esistere nella stringa precedente. e questo è un problema.
-
In questo modo ho bisogno di creare un hash casuale per ciascun delimitatore (diciamo una stringa casuale di 4 caratteri) e controllare prima che non faccia parte di una stringa originale.
-
Inoltre, gli hash per ciascun delimitatore dovrebbero differire l'uno dall'altro.
-
Inoltre, gli hash non dovrebbero essere parte l'uno dell'altro. Altrimenti guarda cosa succede, se ("aa", "ac", "cd") - 3 hash generati rispettivamente ("abc", ",", "W"). Abbastanza buono? Beh ... Vediamo ... Guarda cosa succede male con questa stringa
str
:aabcW,kkk ====step1====> aaacdackkk ====step2====> abc,d,kkk.
Oh, risultato inatteso - numero diverso di virgole, informazioni perse.
Vedi il problema?
Quindi, qual è l'algoritmo per generare correttamente, ad esempio, cinque hash per sostituire cinque sottostringhe all'interno di una stringa e effettuare l'operazione inversa come descritto sopra senza perdere alcuna informazione?
Qualsiasi algoritmo in javascript ma veloce andrebbe bene. E fornirò la mia soluzione in un istante. Immagino che possano esserci idee migliori.