如何从文件中读取一个单词的大写和小写形式?

huangapple go评论116阅读模式
英文:

How to read a word in upper and lower case from file? Go

问题

我有一个任务,需要读取一个文件,然后扫描是否包含"不良词汇",最后输出文件中是否包含"不良词汇"的结果,如果包含则输出"True",否则输出"False"。

我写了这个函数:

  1. func readFile(fileName string, tabooName string) {
  2. dataFile, err := os.Open(fileName)
  3. if err != nil {
  4. log.Fatal(err)
  5. }
  6. defer dataFile.Close()
  7. scanner := bufio.NewScanner(dataFile)
  8. for scanner.Scan() {
  9. scanner.Text()
  10. if strings.Contains(scanner.Text(), strings.ToLower(tabooName)) || strings.Contains(scanner.Text(), strings.ToUpper(tabooName)) {
  11. fmt.Println("True")
  12. break
  13. } else {
  14. fmt.Println("False")
  15. break
  16. }
  17. }
  18. if err := scanner.Err(); err != nil {
  19. log.Fatal(err)
  20. }
  21. }

但是,如果"不良词汇"以大写形式写入,它无法正常工作。例如:

  1. 测试 #2 中的错误答案
  2. 这个词属于不良词汇
  3. 请查看您的程序在此失败测试期间的输出
  4. 注意">" 字符表示输入行的开头
  5. ---
  6. forbidden_words.txt
  7. HARSH
  8. False

我应该如何正确处理这个问题?

更新:我不知道为什么,但这个函数现在可以正常工作了...
首先,我只是将整个函数写在了main函数中,它可以工作,现在将函数封装成了func,它也可以工作。我不知道为什么,哈哈。

英文:

I have a task to read a file and, then scan for "bad word", and finally output "True" or "False" if "bad word" contains in file or not.
I wrote this function:

  1. func readFile(fileName string, tabooName string) {
  2. dataFile, err := os.Open(fileName)
  3. if err != nil {
  4. log.Fatal(err)
  5. }
  6. defer dataFile.Close()
  7. scanner := bufio.NewScanner(dataFile)
  8. for scanner.Scan() {
  9. scanner.Text()
  10. if strings.Contains(scanner.Text(), strings.ToLower(tabooName)) || strings.Contains(scanner.Text(), strings.ToUpper(tabooName)) {
  11. fmt.Println("True")
  12. break
  13. } else {
  14. fmt.Println("False")
  15. break
  16. }
  17. }
  18. if err := scanner.Err(); err != nil {
  19. log.Fatal(err)
  20. }
  21. }

But it does not work if the "bad word" is written in UPPERCASE
For example:

  1. Wrong answer in test #2
  2. This word belongs to bad words
  3. Please find below the output of your program during this failed test.
  4. Note that the '>' character indicates the beginning of the input line.
  5. ---
  6. forbidden_words.txt
  7. HARSH
  8. False

How can i do it corectly?

UPDATE: I don't know why but this function is working now...
First, i justed wrote this whole func in main function, and it's working, now with func it's working too. I don't know why lol

答案1

得分: 1

你可以稍微不同地使用strings.Containsstrings.ToLower

  1. func readFile(fileName string, tabooName string) {
  2. file, err := os.Open(fileName)
  3. if err != nil {
  4. log.Fatal(err)
  5. }
  6. defer file.Close()
  7. tabooNameLowered := strings.ToLower(tabooName)
  8. scanner := bufio.NewScanner(file)
  9. for scanner.Scan() {
  10. loweredLine := strings.ToLower(scanner.Text())
  11. if strings.Contains(loweredLine, tabooNameLowered) {
  12. fmt.Println("True")
  13. return
  14. }
  15. }
  16. fmt.Println("False")
  17. if err := scanner.Err(); err != nil {
  18. log.Fatal(err)
  19. }
  20. }
英文:

You could use <code>strings.<b>Contains</b></code> and <code>strings.<b>ToLower</b></code> slightly differently:

  1. func readFile(fileName string, tabooName string) {
  2. file, err := os.Open(fileName)
  3. if err != nil {
  4. log.Fatal(err)
  5. }
  6. defer file.Close()
  7. tabooNameLowered := strings.ToLower(tabooName)
  8. scanner := bufio.NewScanner(file)
  9. for scanner.Scan() {
  10. loweredLine := strings.ToLower(scanner.Text())
  11. if strings.Contains(loweredLine, tabooNameLowered) {
  12. fmt.Println(&quot;True&quot;)
  13. return
  14. }
  15. }
  16. fmt.Println(&quot;False&quot;)
  17. if err := scanner.Err(); err != nil {
  18. log.Fatal(err)
  19. }
  20. }

huangapple
  • 本文由 发表于 2022年7月17日 19:26:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/73011353.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定