2011-11-18 1 views
14

Je reçois une adresse de localisation physique de la part d'un utilisateur et tente de l'organiser pour créer une URL qui sera utilisée plus tard pour obtenir une réponse JSON de l'API Google Geocode.Comment remplacer un seul caractère dans une chaîne de Golang?

Le résultat final de chaîne d'URL doit être similaire à this one, sans espaces:

http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true

Je ne sais pas comment remplacer les espaces blancs dans ma chaîne d'URL et d'avoir des virgules à la place. Je l'ai lu un peu sur les chaînes et les paquets de regexp et j'ai créé le code suivant:

package main 

import (
    "fmt" 
    "bufio" 
    "os" 
    "http" 
) 

func main() { 
    // Get the physical address 
    r := bufio.NewReader(os.Stdin) 
    fmt.Println("Enter a physical location address: ") 
    line, _, _ := r.ReadLine() 

    // Print the inputted address 
    address := string(line) 
    fmt.Println(address) // Need to see what I'm getting 

    // Create the URL and get Google's Geocode API JSON response for that address 
    URL := "http://maps.googleapis.com/maps/api/geocode/json?address=" + address + "&sensor=true" 
    fmt.Println(URL) 

    result, _ := http.Get(URL) 
    fmt.Println(result) // To see what I'm getting at this point 
} 

+2

Les chaînes sont des objets immuables dans go. Vous ne pouvez donc pas remplacer les caractères dans une chaîne. Au lieu de cela, vous pouvez créer une nouvelle chaîne en utilisant say tranches avec le remplacement. – user510306

Répondre

40

Vous pouvez utiliser strings.Replace.

package main 

import (
    "fmt" 
    "strings" 
) 

func main() { 
    str := "a space-separated string" 
    str = strings.Replace(str, " ", ",", -1) 
    fmt.Println(str) 
} 

Si vous avez besoin de remplacer plus d'une chose, ou vous aurez besoin de faire le même remplacement à plusieurs reprises, il pourrait être préférable d'utiliser un strings.Replacer:

package main 

import (
    "fmt" 
    "strings" 
) 

// replacer replaces spaces with commas and tabs with commas. 
// It's a package-level variable so we can easily reuse it, but 
// this program doesn't take advantage of that fact. 
var replacer = strings.NewReplacer(" ", ",", "\t", ",") 

func main() { 
    str := "a space- and\ttab-separated string" 
    str = replacer.Replace(str) 
    fmt.Println(str) 
} 

Et bien sûr Si vous remplacez dans le but de l'encodage, comme le codage d'URL, alors il pourrait être préférable d'utiliser une fonction spécifique à cet effet, comme url.QueryEscape

+0

merci pour la réponse, Si je peux demander - je veux remplacer plusieurs caractères par plusieurs valeurs différentes. par exemple> remplacer A par B, C par D (c'est juste un exemple). J'utilise plusieurs instructions 'string.Replace (...)', et ça marche bien mais je cherche une meilleure alternative s'il y en a? – Pranav

+0

J'ai mis à jour ma réponse pour mentionner 'strings.Replacer', qui n'existait pas lorsque j'ai répondu à cette question. –

+1

Encore une fois, merci beaucoup pour vos efforts et votre temps. Et tu m'as appris une leçon que lire avec les yeux ouverts est une vraie lecture :) J'ai raté ce 'replacer' hier en passant par les docs. Merci. – Pranav

Questions connexes