Maison >développement back-end >Golang >Remplacer les caractères dans la chaîne en golang

Remplacer les caractères dans la chaîne en golang

WBOY
WBOYavant
2024-02-09 18:09:071247parcourir

Remplacer les caractères dans la chaîne en golang

En programmation golang, remplacer des caractères dans une chaîne est une opération courante. Que vous remplaciez un seul caractère ou plusieurs caractères, vous pouvez le faire en utilisant les fonctions et méthodes de chaîne intégrées. Dans cet article, nous allons vous présenter comment remplacer les caractères de chaîne dans Golang par l'éditeur PHP Xinyi. Que vous soyez débutant ou développeur expérimenté, cet article vous fournira des conseils concis et clairs pour vous aider à maîtriser cette technique en toute simplicité.

Contenu de la question

J'essaie de remplacer un caractère à une position spécifique dans un tableau de chaînes. Mon code ressemble à ceci :

package main

import (
    "fmt"
)

func main() {
    str := []string{"test","testing"}
    str[0][2] = 'y'
    fmt.Println(str)
}

À l'heure actuelle, l'exécution de cette commande me donne l'erreur : 

cannot assign to str[0][2]

Une idée de comment faire ça ? J'ai essayé d'utiliser strings.Replace mais pour autant que je sache, cela remplacera toutes les occurrences d'un caractère donné et je souhaite remplacer ce caractère spécifique. Toute aide est appréciée. TIA.

Solution

Les chaînes dans Go sont immuables, vous ne pouvez pas modifier leur contenu. Pour modifier la valeur d'une variable chaîne, vous devez attribuer une nouvelle valeur chaîne.

Un moyen simple consiste d'abord à convertir string en tranche d'octet ou de rune, à apporter des modifications et à reconvertir :

s := []byte(str[0])
s[2] = 'y'
str[0] = string(s)
fmt.Println(str)

Cela affichera (essayez-le sur Go Playground) :

[teyt testing]

Remarque : J'ai converti la chaîne en tranche byte car c'est ce qui se passe lorsque vous indexez une chaîne : elle indexe ses octets. byte 切片,因为这就是您索引字符串时发生的情况:它索引其字节。 string Stocke une séquence de texte UTF-8 octets, qui ne mappe pas nécessairement les octets aux caractères un à un.

Si vous devez remplacer le deuxième caractère, utilisez plutôt []rune :

s := []rune(str[0])
s[2] = 'y'
str[0] = string(s)
fmt.Println(str)

Dans cet exemple, cela n'a pas d'importance, mais en général, c'est probablement le cas.

Notez également que strings.Replace() ne remplace pas (nécessairement) toutes les occurrences de :

func Replace(s, old, new string, n int) string

Paramètre n indique le nombre maximum de substitutions à effectuer. Par conséquent, ce qui suit fonctionne également (essayez-le sur Go Playground) :

str[0] = strings.Replace(str[0], "s", "y", 1)

Une autre solution pourrait être de découper la chaîne jusqu'au caractère remplaçable et de commencer par le caractère après le caractère remplaçable, puis de les concaténer (dans Aller au terrain de jeu) :

str[0] = str[0][:2] + "y" + str[0][3:]

Des précautions doivent être prises ici aussi : l'index de tranche est un index d'octets, pas un index de caractère (rune).

Voir les questions connexes : Chaînes immuables et adresses de pointeurs p>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer