make zh2tw

This commit is contained in:
chai2010
2015-12-21 12:52:25 +08:00
parent 14665b4d9c
commit d024df28e9
7 changed files with 131 additions and 131 deletions

View File

@@ -1,15 +1,15 @@
### 3.5.4. 字符串和Byte切片
标准库中有四个包对字符串理尤重要: bytes, strings, strconv, 和 unicode. strings 包提供了多如字符串的查询, 替, 比, 截, 拆分, 和合等功能.
標準庫中有四個包對字符串理尤重要: bytes, strings, strconv, 和 unicode. strings 包提供了多如字符串的査詢, 替, 比, 截, 拆分, 和合等功能.
bytes 包也提供了很多似功能的函, 但是针对和字符串有着相同结构的 []byte 型. 因字符串是只读的, 因此逐步建字符串会导致很多分配和复制. 在这种情况下, 使用 bytes.Buffer 类型会更有效, 稍后我们将展示.
bytes 包也提供了很多似功能的函, 但是針對和字符串有着相同結構的 []byte 型. 因字符串是隻讀的, 因此逐步建字符串會導致很多分配和複製. 在這種情況下, 使用 bytes.Buffer 類型會更有效, 稍後我們將展示.
strconv 包提供了 布型, 整型, 浮点数和对应字符串的相互转换, 提供了双引号的字符串面值形式的转换.
strconv 包提供了 布型, 整型, 浮點數和對應字符串的相互轉換, 提供了雙引號的字符串面值形式的轉換.
unicode 包提供了似 IsDigit, IsLetter, IsUpper, 和 IsLower 等功能, 它们用于给字符分. 每个函数有一个单一的rune型的参数, 然后返回一个布尔值. 像 ToUpper 和 ToLower 之类的转换函数将用于rune字符的大小写转换. 所有的些函都是遵循Unicode标准定义的字母,字等分类规范. strings 包也有似的函, 它是 ToUpper 和 ToLower, 原始字符串的每字符都做相应的转换, 然后返回新的字符串.
unicode 包提供了似 IsDigit, IsLetter, IsUpper, 和 IsLower 等功能, 它們用於給字符分. 每個函數有一個單一的rune型的參數, 然後返迴一個布爾值. 像 ToUpper 和 ToLower 之類的轉換函數將用於rune字符的大小寫轉換. 所有的些函都是遵循Unicode標準定義的字母,字等分類規范. strings 包也有似的函, 它是 ToUpper 和 ToLower, 原始字符串的每字符都做相應的轉換, 然後返迴新的字符串.
下面的 basename 函数的灵感由Unix shell的同名工具而. 在我们实现的版本中, basename(s) 看起像是系统路径的前缀删除, 同时将看似文件型的后缀名删除:
下面的 basename 函數的靈感由Unix shell的同名工具而. 在我們實現的版本中, basename(s) 看起像是繫統路徑的前綴刪除, 同時將看似文件型的後綴名刪除:
```Go
fmt.Println(basename("a/b/c.go")) // "c"
@@ -17,7 +17,7 @@ fmt.Println(basename("c.d.go")) // "c.d"
fmt.Println(basename("abc")) // "abc"
```
第一版本并没有使用任何, 全部手工实现:
第一版本併沒有使用任何, 全部手工實現:
```Go
gopl.io/ch3/basename1
@@ -42,7 +42,7 @@ func basename(s string) string {
}
```
个简化的版本使用了 strings.LastIndex 库函数:
個簡化的版本使用了 strings.LastIndex 庫函數:
```Go
gopl.io/ch3/basename2
@@ -57,10 +57,10 @@ func basename(s string) string {
}
```
path 和 path/filepath 包提供了关于文件名更一般的函操作. 使用斜分隔路可以在任何操作系统上工作. 斜本身不应该用于文件名, 但是在其他一些域可能是有效的, 例如URL路径组件. 相比之下, path/filepath 包使用操作系统本身的路径规则, 例如 POSIX 系统使用 /foo/bar, Microsoft Windows 使用 c:\foo\bar 等.
path 和 path/filepath 包提供了關於文件名更一般的函操作. 使用斜分隔路可以在任何操作繫統上工作. 斜本身不應該用於文件名, 但是在其他一些域可能是有效的, 例如URL路徑組件. 相比之下, path/filepath 包使用操作繫統本身的路徑規則, 例如 POSIX 繫統使用 /foo/bar, Microsoft Windows 使用 c:\foo\bar 等.
让我们继续另一字符串的例子. 任务是将一个表示整值的字符串, 每隔三字符插入一个逗号, 例如 "12345" 处理后成为 "12,345". 这个版本只适用于整数类型; 支持浮点数类型的支持留做练习.
讓我們繼續另一字符串的例子. 任務是將一個表示整值的字符串, 每隔三字符插入一個逗號, 例如 "12345" 處理後成爲 "12,345". 這個版本隻適用於整數類型; 支持浮點數類型的支持留做練習.
```Go
gopl.io/ch3/comma
@@ -75,11 +75,11 @@ func comma(s string) string {
}
```
入 comma 的参数是一字符串. 如果入字符串的度小或等3的, 不需要插入逗. 否, comma 在最后三个字符前切割为两个两个子串, 然用前面的子串递归调用自身.
入 comma 的參數是一字符串. 如果入字符串的度小或等3的, 不需要插入逗. 否, comma 在最後三個字符前切割爲兩個兩個子串, 然用前面的子串遞歸調用自身.
字符串包含的字节数组, 一旦建, 是不可的. 相比之下, 一个字节切片的原始可以自由地改.
字符串包含的字節數組, 一旦建, 是不可的. 相比之下, 一個字節切片的原始可以自由地改.
字符串和字切片可以相互转换:
字符串和字切片可以相互轉換:
```Go
s := "abc"
@@ -87,9 +87,9 @@ b := []byte(s)
s2 := string(b)
```
概念上, []byte(s) 转换是分配了一新的字节数组保存了字符串数据的拷, 然引用这个字节数组. 编译器的化可以避免在一些景下分配和复制字符串数据, 但总的来说需要保在b被改的情下, 原始的s字符串也不会改变. 将一个字节切片到字符串的 string(b) 操作则是构造一个拷贝, 以保s2字符串是只读的.
概念上, []byte(s) 轉換是分配了一新的字節數組保存了字符串數據的拷, 然引用這個字節數組. 編譯器的化可以避免在一些景下分配和複製字符串數據, 但總的來説需要保在b被改的情下, 原始的s字符串也不會改變. 將一個字節切片到字符串的 string(b) 操作則是構造一個拷貝, 以保s2字符串是隻讀的.
了避免转换中不必要的存分配, bytes包和strings同提供了许多类似的用函. 下面是strings包中的六个函数:
了避免轉換中不必要的存分配, bytes包和strings同提供了許多類似的用函. 下面是strings包中的六個函數:
```Go
func Contains(s, substr string) bool
@@ -100,7 +100,7 @@ func Index(s, sep string) int
func Join(a []string, sep string) string
```
bytes 包中对应的六个函数:
bytes 包中對應的六個函數:
```Go
func Contains(b, subslice []byte) bool
@@ -111,9 +111,9 @@ func Index(s, sep []byte) int
func Join(s [][]byte, sep []byte) []byte
```
唯一的别是字符串类型参数被替成了字切片型的参数.
唯一的别是字符串類型參數被替成了字切片型的參數.
bytes 包提供了 Buffer 型用于字节切片的存. 一 Buffer 始是空的, 但是着 string, byte, 和 []byte 等类型数据的写入可以动态增长, 一 bytes.Buffer 变量并不需要理化, 因此零值也是有效的:
bytes 包提供了 Buffer 型用於字節切片的存. 一 Buffer 始是空的, 但是着 string, byte, 和 []byte 等類型數據的寫入可以動態增長, 一 bytes.Buffer 變量併不需要理化, 因此零值也是有效的:
```Go
gopl.io/ch3/printints
@@ -137,16 +137,16 @@ func main() {
}
```
向 bytes.Buffer 添加任意字符的UTF8编码, 最好使用 bytes.Buffer 的 WriteRune 方法, 但是 WriteByte 方法对于写入类似 '[' 和 ']' 等 ASCII 字符更有效.
向 bytes.Buffer 添加任意字符的UTF8編碼, 最好使用 bytes.Buffer 的 WriteRune 方法, 但是 WriteByte 方法對於寫入類似 '[' 和 ']' 等 ASCII 字符更有效.
bytes.Buffer 型有着诸多实用的功能, 我在第七章讨论接口时层涉及到, 我们将看看如何它用作一I/O 的入和输出对象, 例如 Fprintf 的 io.Writer 输出, 或作为输入源 io.Reader.
bytes.Buffer 型有着諸多實用的功能, 我在第七章討論接口時層涉及到, 我們將看看如何它用作一I/O 的入和輸齣對象, 例如 Fprintf 的 io.Writer 輸齣, 或作爲輸入源 io.Reader.
**练习3.10:** 编写一个非递归版本的comma函, 使用 bytes.Buffer 代替字符串接操作.
**練習3.10:** 編寫一個非遞歸版本的comma函, 使用 bytes.Buffer 代替字符串接操作.
**练习3.11:** 完善 comma 函, 以支持浮点数处理和一个可选的正负号处理.
**練習3.11:** 完善 comma 函, 以支持浮點數處理和一個可選的正負號處理.
**练习3.12:** 编写一个函数, 判断两个字符串是否是是相互打的, 也就是说它们有着相同的字符, 但是对应不同的序.
**練習3.12:** 編寫一個函數, 判斷兩個字符串是否是是相互打的, 也就是説它們有着相同的字符, 但是對應不同的序.