輸入字符串: 「///hello//stackover.flow」如何在一個字符串中將多個斜線(///)替換爲Go lang中的一個斜線(/)?
預期輸出: 「/hello/stackover.flow」
輸入字符串: 「///hello//stackover.flow」如何在一個字符串中將多個斜線(///)替換爲Go lang中的一個斜線(/)?
預期輸出: 「/hello/stackover.flow」
只是一種選擇。如果您需要替換其他多個字符,則可以使用它。
re, _ := regexp.Compile("/+")
fmt.Println(re.ReplaceAllLiteralString("///hello//stackover.flow", "/"))
您可以使用path.Clean
了點。
func Clean(path string) string
清潔返回相當於最短路徑名路徑由單純的詞彙處理。它反覆應用以下規則,直到不能進一步處理:
- 用單斜槓替換多個斜線。
- 消除每個。路徑名稱元素(當前目錄)。
- 消除每個內部..路徑名稱元素(父目錄) 以及它之前的非..元素。
- 消除..開始根路徑的元素: 即在路徑開頭用「/」替換「/ ..」。 返回的路徑只有以「/」爲根時才以斜槓結尾。
如果此過程的結果是空字符串,則Clean將返回字符串「。」。
這裏是一個簡單的基準,這與正則表達式的解決方案進行比較:
package main
import (
"path"
"regexp"
"testing"
)
var p = "///hello//stackover.flow"
func BenchmarkPathRegexp(b *testing.B) {
re := regexp.MustCompile("/+")
for i := 0; i < b.N; i++ {
re.ReplaceAllLiteralString(p, "/")
}
}
func BenchmarkPathClean(b *testing.B) {
for i := 0; i < b.N; i++ {
path.Clean(p)
}
}
結果:
BenchmarkPathRegexp-4 2000000 794 ns/op
BenchmarkPathClean-4 10000000 145 ns/op
這應該是一個被接受的答案。 – Matt