aboutsummaryrefslogtreecommitdiff
path: root/src/strings/strings.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/strings/strings.go')
-rw-r--r--src/strings/strings.go25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/strings/strings.go b/src/strings/strings.go
index fb53b59f2c..d07a064228 100644
--- a/src/strings/strings.go
+++ b/src/strings/strings.go
@@ -1158,19 +1158,22 @@ func Replace(s, old, new string, n int) string {
var b Builder
b.Grow(len(s) + n*(len(new)-len(old)))
start := 0
- for i := 0; i < n; i++ {
- j := start
- if len(old) == 0 {
- if i > 0 {
- _, wid := utf8.DecodeRuneInString(s[start:])
- j += wid
- }
- } else {
- j += Index(s[start:], old)
+ if len(old) > 0 {
+ for range n {
+ j := start + Index(s[start:], old)
+ b.WriteString(s[start:j])
+ b.WriteString(new)
+ start = j + len(old)
}
- b.WriteString(s[start:j])
+ } else { // len(old) == 0
b.WriteString(new)
- start = j + len(old)
+ for range n - 1 {
+ _, wid := utf8.DecodeRuneInString(s[start:])
+ j := start + wid
+ b.WriteString(s[start:j])
+ b.WriteString(new)
+ start = j
+ }
}
b.WriteString(s[start:])
return b.String()