如何检查文件是否包含字符串?

我试图在谷歌上搜索文件和字符串之间的模式匹配功能,但我找不到它。我也尝试过使用strings.Contains(),但它在大输入文件中给出了错误的结果。


Go 中是否有用于在某个文件中搜索字符串的功能?


如果不是,是否有其他方法可以解决此问题?


这是我的代码:


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))


}


小唯快跑啊
浏览 204回答 2
2回答

互换的青春

如果我正确阅读了您的问题,您想从文件中读取并确定在命令行中输入的字符串是否在该文件中......而且我认为您看到的问题与字符串分隔符有关,reader.ReadString('\n')位,而不是string.Contains()。在我看来,制作你想要的东西会更容易一些fmt.Scanln;它会简化事情并返回一个我很确定是你想要的结果。试试你的代码的这个变体:package mainimport (    "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))}

蝴蝶不菲

我只是添加一个标志来使用命令行参数。如果什么都没通过,它会提示你:)。package mainimport (    "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=Nissanfunc 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))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go