Skip to content

Commit 2063a2e

Browse files
committed
#72 moji.Squeeze() improvement, the 2nd argument is "byte"
1 parent 96f1f5e commit 2063a2e

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed

moji/03-squeeze_test.go

+8-9
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,16 @@ import "testing"
1313
func TestSqueeze(t *testing.T) {
1414
fn := "moji.Squeeze"
1515
cx := 0
16-
ae := []struct {text string; char string; expected string}{
17-
{"neko meow cat", " ", "neko meow cat"},
18-
{"neko meow cat", " ", "neko meow cat"},
19-
{"neko//////meow///cat", "/", "neko/meow/cat"},
20-
{"neko::meow:::::::cat", ":", "neko:meow:cat"},
21-
{"nekochan", "", "nekochan"},
22-
{"nekonekopoint", "neko", "nekopoint"},
23-
{"", "?", ""},
16+
ae := []struct {text string; char byte; expected string}{
17+
{"neko meow cat", ' ', "neko meow cat"},
18+
{"neko meow cat", ' ', "neko meow cat"},
19+
{"neko//////meow///cat", '/', "neko/meow/cat"},
20+
{"neko::meow:::::::cat", ':', "neko:meow:cat"},
21+
{"nekochan", ' ', "nekochan"},
22+
{"", '?', ""},
2423
}
2524
for _, e := range ae {
26-
cx++; if Squeeze(e.text, e.char) != e.expected { t.Errorf("%s(%s, %s) returns %s", fn, e.text, e.char, e.expected) }
25+
cx++; if Squeeze(e.text, e.char) != e.expected { t.Errorf("%s(%s, %c) returns %s", fn, e.text, e.char, e.expected) }
2726
}
2827
t.Logf("The number of tests = %d", cx)
2928
}

moji/lib.go

+14-10
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,23 @@ func Token(argv1 string, argv2 string, epoch int) string {
3333

3434
// Squeeze remove redundant characters from the given string
3535
// Arguments:
36-
// - argv1 (string): String including redundant characters like "neko chan"
37-
// - chars (string): Characters to be squeezed, for example " "
36+
// - argv0 (string): String including redundant characters like "neko chan"
37+
// - argv1 (string): Characters to be squeezed, for example " "
3838
// Returns:
3939
// - (string): Squeezed string such as "neko chan"
40-
func Squeeze(argv1 string, chars string) string {
41-
if argv1 == "" { return "" }
42-
if len(chars) == 0 { return argv1 }
40+
func Squeeze(argv0 string, argv1 byte) string {
41+
if argv0 == "" { return "" }
4342

44-
for strings.Contains(argv1, chars + chars) {
45-
// Remove redundant characters from "argv1"
46-
argv1 = strings.ReplaceAll(argv1, chars + chars, chars)
43+
bytebuffer := []byte(argv0)
44+
textbuffer := make([]byte, 0, len(bytebuffer))
45+
46+
cb := byte(0); for _, by := range bytebuffer {
47+
// Remove a character that is the same character of the previous character
48+
if by == argv1 && by == cb { continue }
49+
textbuffer = append(textbuffer, by)
50+
cb = by
4751
}
48-
return argv1
52+
return string(textbuffer)
4953
}
5054

5155
// Sweep clears the string out.
@@ -56,7 +60,7 @@ func Squeeze(argv1 string, chars string) string {
5660
func Sweep(argv1 string) string {
5761
if argv1 == "" { return "" }
5862

59-
argv1 = Squeeze(strings.TrimSpace(strings.ReplaceAll(argv1, "\t", " ")), " ")
63+
argv1 = Squeeze(strings.TrimSpace(strings.ReplaceAll(argv1, "\t", " ")), ' ')
6064
for strings.Contains(argv1, " --") {
6165
// Delete all the string after a boundary string like " --neko-chan"
6266
if strings.Contains(argv1, "-- ") { break }

0 commit comments

Comments
 (0)