1 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
我們只能猜測(cè)。你沒有清楚地定義你的問題。請(qǐng)闡明您的具體問題或添加其他詳細(xì)信息以準(zhǔn)確突出您的需求。提供示例輸入和輸出。
Go 編程語言規(guī)范
在反斜杠之后,某些單字符轉(zhuǎn)義表示特殊值:
\n???U+000A?line?feed?or?newline
這是一個(gè)猜測(cè):
lines.go
:
package main
import (
? ? "fmt"
? ? "io/ioutil"
? ? "os"
? ? "strings"
)
func lines(data []byte) {
? ? text := string(data)
? ? for i, j := 0, 0; j >= 0; i += j + 1 {
? ? ? ? var line string
? ? ? ? j = strings.IndexByte(text[i:], '\n')
? ? ? ? if j < 0 {
? ? ? ? ? ? line = text[i:]
? ? ? ? ? ? if len(line) == 0 {
? ? ? ? ? ? ? ? continue
? ? ? ? ? ? }
? ? ? ? } else {
? ? ? ? ? ? line = text[i : i+j+1]
? ? ? ? }
? ? ? ? // process line
? ? ? ? fmt.Printf("%d %q\n", len(line), line)
? ? }
}
func main() {
? ? filename := `test.file`
? ? data, err := ioutil.ReadFile(filename)
? ? if err != nil {
? ? ? ? fmt.Fprintln(os.Stderr, err)
? ? ? ? return
? ? }
? ? fmt.Printf("%d %q\n", len(data), data)
? ? lines(data)
}
輸出:
$ cat test.file
line1
line2
line3
$ go run lines.go
18 "line1\nline2\nline3\n"
6 "line1\n"
6 "line2\n"
6 "line3\n"
評(píng)論:
我會(huì)嘗試通過一個(gè)例子來闡明它。假設(shè)我有一個(gè)內(nèi)容為“ara/n;>$g9s”的文件,我的應(yīng)用程序?qū)⒃谖募?nèi)容中移動(dòng)時(shí)執(zhí)行由該輸入字符定義的操作。也就是說,如果“a”執(zhí)行操作 1,“r”執(zhí)行操作 2,“/n”執(zhí)行操作 3 等等,那么上面的輸入將按順序執(zhí)行以下操作 1,2,1,3...。但是,如果將字節(jié)數(shù)組轉(zhuǎn)換為字符串,那么我將無法識(shí)別“/n”字符,因?yàn)楸M管打印出來或?qū)⑵溥B接到文件中時(shí)字符串的格式與以前相同,但它們似乎已被刪除。– 埃利奧特史密斯
你為什么要寫/n一個(gè)換行符!正如我已經(jīng)指出的那樣,換行符 U+000A 寫為\n.
例如,
package main
import "fmt"
func es(s string) {
? ? for _, r := range s {
? ? ? ? switch r {
? ? ? ? case 'a':
? ? ? ? ? ? fmt.Printf("action 1 for %q\n", r)
? ? ? ? case 'r':
? ? ? ? ? ? fmt.Printf("action 2 for %q\n", r)
? ? ? ? case '\n':
? ? ? ? ? ? fmt.Printf("action 3 for %q\n", r)
? ? ? ? default:
? ? ? ? ? ? fmt.Printf("action ? for %q\n", r)
? ? ? ? }
? ? }
}
func main() {
? ? b := []byte("ara\n;>$g9s")
? ? s := string(b)
? ? es(s)
}
游樂場(chǎng):https://play.golang.org/p/3J0pxXh3Wkc
輸出:
action 1 for 'a'
action 2 for 'r'
action 1 for 'a'
action 3 for '\n'
action ? for ';'
action ? for '>'
action ? for '$'
action ? for 'g'
action ? for '9'
action ? for 's'
修改后的問題:
例子:如果文件內(nèi)容是“r/n3$/n;” 那么當(dāng)我從左到右移動(dòng)文件內(nèi)容時(shí),我應(yīng)該能夠執(zhí)行 6 個(gè)預(yù)定義的操作(每個(gè)字符一個(gè))。埃利奧特·史密斯
你為什么要寫/n一個(gè)換行符!正如我已經(jīng)指出的那樣,換行符 U+000A 寫為\n.
例如,
package main
import "fmt"
func es(s string) {
? ? for _, r := range s {
? ? ? ? switch r {
? ? ? ? case 'a':
? ? ? ? ? ? fmt.Printf("action for %q\n", r)
? ? ? ? case 'r':
? ? ? ? ? ? fmt.Printf("action for %q\n", r)
? ? ? ? case '\n':
? ? ? ? ? ? fmt.Printf("action for %q\n", r)
? ? ? ? default:
? ? ? ? ? ? fmt.Printf("action for %q\n", r)
? ? ? ? }
? ? }
}
func main() {
? ? file := []byte("r\n3$\n;")
? ? s := string(file)
? ? es(s)
}
游樂場(chǎng):https://play.golang.org/p/X1gtrPRmlqq
輸出:
action for 'r'
action for '\n'
action for '3'
action for '$'
action for '\n'
action for ';'
- 1 回答
- 0 關(guān)注
- 150 瀏覽
添加回答
舉報(bào)