2011-11-18 46 views
14

Tôi đang nhận được địa chỉ vị trí thực từ người dùng và cố gắng sắp xếp địa chỉ đó để tạo URL sẽ sử dụng sau này để nhận phản hồi JSON từ API mã hóa địa lý của Google.Làm thế nào để thay thế một ký tự đơn bên trong một chuỗi trong Golang?

Kết quả chuỗi URL cuối cùng nên được tương tự this one, không có khoảng:

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

Tôi không biết làm thế nào để thay thế không gian trắng trong chuỗi URL của tôi và có dấu phẩy để thay thế. Tôi đã đọc một chút về chuỗi và các gói regexp và tôi đã tạo ra đoạn mã sau:

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

Chuỗi là các đối tượng không thay đổi được khi di chuyển. Vì vậy, bạn không thể thay thế ký tự trong một chuỗi. Thay vào đó, bạn có thể tạo một chuỗi mới bằng cách sử dụng các lát nói thay thế. – user510306

Trả lời

40

Bạn có thể sử dụng strings.Replace.

package main 

import (
    "fmt" 
    "strings" 
) 

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

Nếu bạn cần phải thay thế nhiều hơn một điều, hoặc bạn sẽ cần phải làm việc thay thế cùng hơn và hơn, nó có thể là tốt hơn để sử dụng một 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) 
} 

Và tất nhiên nếu bạn đang thay thế cho mục đích mã hóa, chẳng hạn như mã hóa URL, thì có thể tốt hơn nếu sử dụng một hàm cụ thể cho mục đích đó, chẳng hạn như url.QueryEscape

+0

cảm ơn câu trả lời, Nếu tôi có thể yêu cầu - Tôi muốn thay thế nhiều ký tự theo nhiều giá trị khác nhau. ví dụ: thay thế A bằng B, C theo D (đây chỉ là ví dụ). Tôi đang sử dụng nhiều 'string.Replace (...)' báo cáo, và nó hoạt động tốt nhưng tìm kiếm thay thế tốt hơn nếu có? – Pranav

+0

Tôi đã cập nhật câu trả lời của mình để đề cập đến 'strings.Replacer', không tồn tại khi tôi trả lời câu hỏi này. –

+1

Một lần nữa, cảm ơn bạn rất nhiều vì những nỗ lực và thời gian của bạn. Và bạn đã dạy tôi một bài học đọc với đôi mắt mở là đọc thật :) Tôi đã bỏ lỡ phần này 'replacer' ngày hôm qua trong khi xem qua tài liệu. Cảm ơn. – Pranav

Các vấn đề liên quan