2011-11-18 10 views
14

Obtengo una dirección de ubicación física de un usuario y trato de organizarla para crear una URL que usaría más adelante para obtener una respuesta JSON de la API de Google Geocode.¿Cómo reemplazar un solo carácter dentro de una cadena en Golang?

El resultado cadena URL final debe ser similar a this one, sin espacios:

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

no sé cómo reemplazar los espacios en blanco en mi cadena de URL y tienen comas en su lugar. He leído un poco sobre las cuerdas y los paquetes de expresiones regulares y he creado el siguiente código:

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

Las cadenas son objetos inmutables en marcha. Entonces no puedes reemplazar los caracteres en una cadena. En su lugar, puede crear una nueva cadena usando say slices con el reemplazo. – user510306

Respuesta

40

Puede utilizar strings.Replace.

package main 

import (
    "fmt" 
    "strings" 
) 

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

Si es necesario sustituir más de una cosa, o que necesita para hacer lo mismo una y otra sustitución, podría ser mejor usar 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) 
} 

Y, por supuesto Si está reemplazando con el propósito de la codificación, como la codificación URL, entonces podría ser mejor utilizar una función específica para ese propósito, como url.QueryEscape

+0

gracias por la respuesta, si puedo preguntar: quiero reemplazar varios caracteres por múltiples valores diferentes. e.g> reemplace A por B, C por D (esto es solo un ejemplo). Estoy usando múltiples instrucciones 'string.Replace (...)', y funciona bien, pero ¿busco una mejor alternativa si hay alguna? – Pranav

+0

He actualizado mi respuesta para mencionar 'cadenas.Replacer', que no existía cuando originalmente respondí esta pregunta. –

+1

Nuevamente, muchas gracias por su esfuerzo y tiempo. Y me enseñaste una lección de que leer con los ojos abiertos es una lectura real :) Me perdí este 'replacer' ayer mientras revisaba los documentos. Gracias. – Pranav

Cuestiones relacionadas