2016-04-29 70 views
1
package main 

import (
    "fmt" 
    "strings" 
) 

func main() { 
    fmt.Println(strings.Replace("golang", "g", "1", -1)) 
} 

如何通過*更換所有字符字符串"golang"(上面的字符串),這是它應該像"******"如何更換所有字符串中的字符在golang

+0

你能否給我們更多的例子,說明你會如何表現? – icio

+0

例如:如果我得到像「INHERITED」這樣的字符串,我想將它轉換爲「*********」 – vijay

+1

您的意思是'strings.Replace(「golang」,「golang」,「** ****「,-1)'? – Nadh

回答

6

做它沒有像一個正則表達式的一個簡單方法:

https://play.golang.org/p/B3c9Ket9fp

package main 

import (
    "fmt" 
    "strings" 
) 

func main() { 
    fmt.Println(strings.Repeat("*", len("golang"))) 
} 

更多的東西沿着你很可能首先想的臺詞:

https://play.golang.org/p/nbNNFJApPp

package main 

import (
    "fmt" 
    "regexp" 
) 

func main() { 
    re := regexp.MustCompile(".") 
    fmt.Println(re.ReplaceAllString("golang", "*")) 
} 
+0

@photoiaonized ,,,,,謝謝 – vijay

+2

似乎icza的答案應該被設置爲接受,因爲它考慮到字符串可能有多字節符號 –

11

通過替換所有的字符你會得到一個string具有相同的字符數,但都是'*'。因此,簡單地構建一個string具有相同的字符長度,但都是'*'strings.Repeat()可以(通過連接它)重複string

ss := []string{"golang", "pi", "世界"} 
for _, s := range ss { 
    fmt.Println(s, strings.Repeat("*", utf8.RuneCountInString(s))) 
} 

輸出(嘗試在Go Playground):

golang ****** 
pi ** 
世界 ** 

注意len(s)爲您提供了UTF-8編碼形式的長度。這樣Go是如何將字符串存儲在內存中的。您可以使用utf8.RuneCountInString()獲取字符數。

例如下面的行:

fmt.Println(len("世界"), utf8.RuneCountInString("世界")) // Prints 6 2 

打印6 2爲字符串"世界"需要6個字節來編碼(以UTF-8),但它僅具有2個字符。

+0

良好的多字節字符調用。 – photoionized

相關問題