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

标签 go pattern-matching

我试图在 Google 上搜索文件和字符串之间的模式匹配函数,但找不到。我也尝试过使用 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))

}

最佳答案

如果我正确地阅读了你的问题,你想从文件中读取并确定在命令行输入的字符串是否在该文件中......我认为你看到的问题与字符串分隔符有关, 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))
}

关于go - 如何检查文件是否包含字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37194739/

相关文章:

arrays - 为什么在 Go 中有数组?

python 正则表达式在两个字符串之间进行匹配

c++ - 在 C++ 中模拟 ML 样式的模式匹配

algorithm - 如何生成匹配模式的数字序列?

c - Hackerrank 上的测试用例失败

mysql - Go:sql RowsAffected with ON DUPLICATE KEY UPDATE

go - 过早触发计时器

go - 使用预先构建的字符串作为 bson.M 在 go 中进行 mgo 查询

go - 无法让 golang pprof 工作

python - SymPy:如何从表达式中获取值