2011-11-18 13 views
14

Kullanıcıdan fiziksel bir konum adresi alıyorum ve Google Geocode API'sından bir JSON yanıtı almak için daha sonra kullanacağı bir URL oluşturmak üzere düzenlemeye çalışıyorum.Golang'da bir dizenin içindeki tek bir karakter nasıl değiştirilir?

son URL dizesi sonucu boşluksuz, this one benzer olmalıdır:

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

yerine virgül benim URL dizesinde beyaz boşlukların yerine ve ele geçirmek için ne bilmiyorum. Ben dizeleri ve regexp'in paketleri hakkında biraz okudum ve ben şu kodu oluşturduk: Sen strings.Replace kullanabilirsiniz

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

Dizeleri hareketsiz kılan nesneler kullanmak daha iyi olabilir. Yani bir dizgede chars değiştiremezsiniz. Bunun yerine, değiştirme ile birlikte söyle dilimlerini kullanarak yeni bir dize oluşturabilirsiniz. – user510306

cevap

40

.

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) 
} 

Ve tabii: Bir strings.Replacer kullanmak daha iyi olabilir,

package main 

import (
    "fmt" 
    "strings" 
) 

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

Birden fazla şey değiştirmeniz gerekiyorsa veya tekrar tekrar aynı yerine yapmak gerekir URL kodlaması gibi kodlama amacıyla değiştiriyorsanız, bu amaçla özellikle url.QueryEscape

+0

Cevabınız için teşekkürler, Soru sorabilir miyim - Birden çok karakteri birden fazla farklı değerle değiştirmek istiyorum. ör.> A'yı B, C ile D'ye değiştirin (bu sadece bir örnektir). Birden çok 'string.Replace (...)' ifadelerini kullanıyorum ve iyi çalışıyor, ancak daha iyi bir alternatif arıyorlar mı? – Pranav

+0

Cevabımı, bu soruyu orijinal olarak yanıtladığımda olmayan "strings.Replacer" ifadesinden bahsetmiştim. –

+1

Yine, çabalarınız ve zamanınız için çok teşekkür ederim. Ve bana açık bir gözle okumanın gerçek bir okuma olduğunu öğrettiniz :) Dün doktora giderken bu 'değiştiriciyi kaçırdım. Teşekkürler. – Pranav

İlgili konular