From c2ed0aba82557793622c08d98777c8b433529380 Mon Sep 17 00:00:00 2001 From: charleshenryhugo Date: Mon, 5 Mar 2018 17:52:35 +0900 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86FindFileDigits(filen?= =?UTF-8?q?ame=20string)=20[]byte=20=E5=87=BD=E6=95=B0=20(#422)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 如果想找到文件中所有数字串,需要用FindAll函数而不是Find --- eBook/07.6.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/eBook/07.6.md b/eBook/07.6.md index 86de76b..cff27ba 100644 --- a/eBook/07.6.md +++ b/eBook/07.6.md @@ -21,7 +21,7 @@ func main() { 输出: - 0:ÿ 2:界 + 0:ÿ 2:界 我们知道,Unicode 字符会占用 2 个字节,有些甚至需要 3 个或者 4 个字节来进行表示。如果发现错误的 UTF8 字符,则该字符会被设置为 U+FFFD 并且索引向前移动一个字节。和字符串转换一样,您同样可以使用 `c := []int32(s)` 语法,这样切片中的每个 int 都会包含对应的 Unicode 代码,因为字符串中的每次字符都会对应一个整数。类似的,您也可以将字符串转换为元素类型为 rune 的切片:`r := []rune(s)`。 @@ -163,6 +163,18 @@ func FindDigits(filename string) []byte { return c } ``` +事实上,上面这段代码只能找到第一个匹配正则表达式的数字串。要想找到所有的数字,可以尝试下面这段代码: +```go +func FindFileDigits(filename string) []byte { +   fileBytes, _ := ioutil.ReadFile(filename) + b := digitRegexp.FindAll(fileBytes, len(fileBytes)) + c := make([]byte, 0) + for _, bytes := range b { + c = append(c, bytes...) + } + return c +} +``` **练习 7.12**