2 回答
TA贡献1818条经验 获得超11个赞
拆分名字和姓氏后,值中有一些额外的空格,所以我添加了字符串。TrimSpace和下面的代码现在正在工作,而且你不需要用固定长度初始化sli,追加会自动增加切片的大小。
package main
import (
"fmt"
"bufio"
"os"
"strings"
"io/ioutil"
)
type person struct {
fName [20]byte
lName [20]byte
}
func main(){
reader := bufio.NewReader(os.Stdin)
fmt.Printf("Enter Name ")
fname, _ := reader.ReadString('\n')
fname = strings.Replace(fname, "\n", "", -1)
fname = strings.Replace(fname, "\r", "", -1)
readFile, err := ioutil.ReadFile(fname)
if err != nil {
panic(err)
}
s := string(readFile)
fileTextLines := strings.Split(s, "\n")
sli := []person{}
for _, eachline := range fileTextLines {
res1 := strings.Split( eachline, " ")
var fname [20]byte
copy( fname[:], []byte(strings.TrimSpace(res1[0])))
fmt.Println(string(fname[:]))
var lname [20]byte
copy( lname[:], []byte(strings.TrimSpace(res1[1])) )
fmt.Println(string(lname[:]))
p := person{fname ,lname}
sli = append(sli,p)
}
// print the slice
for _,object := range sli {
fmt.Printf("First Name: %s Last Name: %s\n", string(object.fName[:]), string(object.lName[:]))
}
}
刚刚发现多余的空格是回车符"\r",如果您使用的是 Windows 平台,您应该使用下面的行来用换行符分割文本
strings.Split(strings.Replace(windows, "\r\n", "\n", -1), "\n")
TA贡献1810条经验 获得超5个赞
使用此代码:
readFile, err := ioutil.ReadFile(fname)
if err != nil {
panic(err)
}
fileTextLines := bytes.Split(readFile, []byte("\n"))
sli := make([]person, 0, len(fileTextLines))
for _, eachline := range fileTextLines {
res1 := bytes.Split(eachline, []byte(" "))
if len(res1) < 2 {
continue
}
var p person
copy(p.fName[:], res1[0])
copy(p.lName[:], res1[1])
sli = append(sli, p)
}
for _, object := range sli {
fmt.Printf("First Name: %s Last Name: %s\n", object.fName[:], object.lName[:])
}
这通过使用 []byte 而不是 string 来简化代码,并处理 line 只有一个标记的情况。
GoLang PlayGround 上的工作示例:https: //play.golang.org/p/JFcM1uE3Ywm
- 2 回答
- 0 关注
- 194 浏览
添加回答
举报