我试图在谷歌上找到文件和字符串之间的模式匹配功能,但我找不到。 我试图使用strings.Contains()但它在大输入文件中给出错误的结果。 我想知道,在golang中是否有任何函数用于搜索或检查某些文件中的字符串?如果不是,请告诉我我是如何以另一种方式解决这个问题的。
这是我的代码:
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
// read the whole file at once
b, err := ioutil.ReadFile("input.txt")
if err != nil {
panic(err)
}
s := string(b)
length := len(s)
//check whether s contains substring text
fmt.Println(strings.Contains(s, text))
}
答案 0 :(得分:3)
如果我正确地阅读了你的问题,你想从文件中读取并确定在命令行输入的字符串是否在该文件中...而且我认为你看到的问题与字符串分隔符有关, reader.ReadString('\n')
位,而不是string.Contains()
。
在我看来,使用fmt.Scanln
制作想要的内容会更容易一些。它会简化一些事情并返回一个我很确定你想要的结果。尝试使用此代码的变体:
package main
import (
"fmt"
"io/ioutil"
"strings"
)
func main() {
var text string
fmt.Print("Enter text: ")
// get the sub string to search from the user
fmt.Scanln(&text)
// read the whole file at once
b, err := ioutil.ReadFile("input.txt")
if err != nil {
panic(err)
}
s := string(b)
// //check whether s contains substring text
fmt.Println(strings.Contains(s, text))
}
答案 1 :(得分:1)
我只是添加一个标志来使用命令行参数。如果没有通过,它会提示你:)。
package main
import (
"flag"
"fmt"
"io/ioutil"
"strings"
)
//Usage go run filename -text=dataYouAreLookingfor
//if looking for Nissan in file the command will be
// go run filename -text=Nissan
func main() {
var text string
// use it as cmdline argument
textArg := flag.String("text", "", "Text to search for")
flag.Parse()
// if cmdline arg was not passed ask
if fmt.Sprintf("%s", *textArg) == "" {
fmt.Print("Enter text: ")
// get the sub string to search from the user
fmt.Scanln(&text)
} else {
text = fmt.Sprintf("%s", *textArg)
}
// read the whole file at once
b, err := ioutil.ReadFile("input.txt")
if err != nil {
panic(err)
}
s := string(b)
// //check whether s contains substring text
fmt.Println(strings.Contains(s, text))
}