Sostituire una substring con un’altra – Codice VB.NET
Sostituire o eliminare in una stringa una substring con un’altra (o con una stringa vuota) a scelta del programmatore.
L’esigenza di dover sostituire parti di un testo o comunque di stringhe si fa spesso sentire: ad esempio si potrebbe voler eliminare tutti i caratteri non stampabili oppure sostituire alla parola “pippo” la parola “cavallo”. Ovviamente esistono metodi più sofisticati, tuttavia il codice seguente può essere di aiuto. La funzione di base pensata da IngAC per sostituire una substring in una stringa è: Private Function IngAC_STRINGHE_RIMPIAZZA(string_input As String, string_search As String, string_replace As String) As String , che sostituisce solo la prima occorrenza della “string_search”, mentre quella deputata allo scopo di scovare e rimpiazzare tutte le occorrenze della “string_search” nella string_input è la: Public Function IngAC_STRINGHE_RIMPIAZZA_TUTTE(string_input As String, string_search As String, string_replace As String) As String.
[codesyntax lang=”vbnet”]
REM ================================================================= Private Function IngAC_STRINGHE_RIMPIAZZA(string_input As String, string_search As String, string_replace As String) As String IngAC_STRINGHE_RIMPIAZZA = string_input If string_input IsNot Nothing And string_search IsNot Nothing Then Dim string_input_len As Integer = string_input.Length Dim string_search_len As Integer = string_search.Length If string_input_len >= string_search_len Then Dim string_search_pos As Integer = InStr(string_input, string_search) If string_search_pos = 0 Then Return string_input Dim Sub_string_1 As String = Strings.Left(string_input, string_search_pos - 1) Dim Sub_string_2 As String = Strings.Right(string_input, string_input_len - string_search_pos - string_search_len + 1) IngAC_STRINGHE_RIMPIAZZA = Sub_string_1 & string_replace & Sub_string_2 End If End If End Function REM ================================================================= Public Function IngAC_STRINGHE_RIMPIAZZA_TUTTE(string_input As String, string_search As String, sAs String) As String IngAC_STRINGHE_RIMPIAZZA_TUTTE = string_input Dim tmp_prima As String = string_input Dim tmp_dopo As String = "" Do tmp_dopo = IngAC_STRINGHE_RIMPIAZZA(tmp_prima, string_search, string_replace) If tmp_prima = tmp_dopo Then Return tmp_dopo Else tmp_prima = tmp_dopo End If Loop End Function
[/codesyntax]
Input delle due funzioni per sostituire una substring
La funzione IngAC_STRINGHE_RIMPIAZZA_TUTTE ha per input, cosi come la funzione IngAC_STRINGHE_RIMPIAZZA i seguenti parametri:
- string_input : è la stringa di origine, nella quale si vuole sostituire una substring (string) o un carattere qualsiasi (char);
- string_search: è la stringa da ricercare nella string_input; può essere sia un singolo carattere sia una stringa. Se la lunghezza supera quella della string_input viene restituita la stringa di partenza, senza modifiche;
- string_replace: è la stringa che verrà messa al posto della string_search. Può essere anche una stringa vuota e in questo caso la funzione diventa: IngAC_STRINGHE_RIMUOVI_TUTTE, il cui codice è semplicemente:
[codesyntax lang=”vbnet”]Public Function IngAC_STRINGHE_RIMUOVI_TUTTE(string_input As String, string_search As String) As String Return IngAC_STRINGHE_RIMPIAZZA_TUTTE(string_input, string_search, "") End Function
[/codesyntax]
Descrizione delle funzioni per sostituire una substring
Il cuore della IngAC_STRINGHE_RIMPIAZZA è instr che restituisce la posizione della prima occorrenza della string_search: con semplici calcoli si determinano due sottostringhe, una che precede e una che segue la string_search: in output viene restituita la loro somma. La IngAC_STRINGHE_RIMPIAZZA_TUTTE è soltanto un loop dal quale si esce quando non ci sono più occorrenze delle string_search: in output restituisce una stringa “pulita” dalla presenza della string_search.