Heim  >  Artikel  >  Backend-Entwicklung  >  Ersetzen Sie Zeichen in einer Zeichenfolge in Golang

Ersetzen Sie Zeichen in einer Zeichenfolge in Golang

WBOY
WBOYnach vorne
2024-02-09 18:09:071206Durchsuche

Ersetzen Sie Zeichen in einer Zeichenfolge in Golang

Bei der Golang-Programmierung ist das Ersetzen von Zeichen in einer Zeichenfolge ein häufiger Vorgang. Unabhängig davon, ob Sie ein einzelnes Zeichen oder mehrere Zeichen ersetzen, können Sie dies mithilfe der integrierten Zeichenfolgenfunktionen und -methoden tun. In diesem Artikel stellen wir Ihnen vor, wie Sie Zeichenfolgenzeichen in Golang durch den PHP-Editor Xinyi ersetzen. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel bietet Ihnen eine prägnante und klare Anleitung, die Ihnen hilft, diese Technik mühelos zu beherrschen.

Inhalt der Frage

Ich versuche, ein Zeichen an einer bestimmten Position in einem String-Array zu ersetzen. Mein Code sieht so aus:

package main

import (
    "fmt"
)

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

Im Moment erhalte ich beim Ausführen dieses Befehls die folgende Fehlermeldung:

cannot assign to str[0][2]

Irgendeine Idee, wie das geht? Ich habe versucht, strings.Replace zu verwenden, aber soweit ich weiß, werden dadurch alle Vorkommen eines bestimmten Zeichens ersetzt, und ich möchte dieses bestimmte Zeichen ersetzen. Jede Hilfe wird geschätzt. TIA.

Workaround

Strings in Go sind unveränderlich, Sie können ihren Inhalt nicht ändern. Um den Wert einer String-Variablen zu ändern, müssen Sie einen neuen String-Wert zuweisen.

Eine einfache Möglichkeit besteht darin, zunächst string in ein Byte- oder Runen-Slice umzuwandeln, Änderungen vorzunehmen und zurück zu konvertieren:

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

Dies wird ausgegeben (versuchen Sie es auf Go Playground):

[teyt testing]

Hinweis: Ich habe die Zeichenfolge in ein Byte-Slice konvertiert, da genau das passiert, wenn Sie eine Zeichenfolge indizieren: Ihre Bytes werden indiziert. byte 切片,因为这就是您索引字符串时发生的情况:它索引其字节。 string Speichert eine UTF-8-Bytesequenz von Text, die Bytes nicht unbedingt eins zu eins den Zeichen zuordnet.

Wenn Sie das zweite Zeichen ersetzen müssen, verwenden Sie stattdessen []rune:

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

In diesem Beispiel spielt es keine Rolle, aber im Allgemeinen ist es wahrscheinlich schon so.

Beachten Sie außerdem, dass strings.Replace() nicht (notwendigerweise) alle Vorkommen von:

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

Parameter n gibt die maximale Anzahl der durchzuführenden Ersetzungen an. Daher funktioniert auch Folgendes (versuchen Sie es auf Go Playground):

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

Eine andere Lösung könnte darin bestehen, die Zeichenfolge bis zum ersetzbaren Zeichen aufzuteilen und mit dem Zeichen nach dem ersetzbaren Zeichen zu beginnen und sie dann zu verketten (in Zum Spielplatz gehen):

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

Auch hier ist Vorsicht geboten: Der Slice-Index ist ein Byte-Index, kein Zeichen-(Rune-)Index.

Siehe verwandte Fragen: Unveränderliche Zeichenfolgen und Zeigeradressen p>

Das obige ist der detaillierte Inhalt vonErsetzen Sie Zeichen in einer Zeichenfolge in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen