dou5454954610 2016-10-30 00:17
浏览 63
已采纳

无法检查字符串。具有用reader.ReadString捕获的字符串的HasSuffix

Overview: I was capturing strings with fmt.Scanln, but one of my needs is that the string must have spaces so I started to use reader.ReadString, I have to check the presence of a suffix in that string to make some replacing, so I used strings.HasSuffix. With strings captured with fmt.Scanln there was no problema but now that I use reader.ReadString it is unabled to find the given suffix in the string.

Is there a clue on what's going on?

Here is a test that isolate the problem, use it in desktop installed Go, not online.

package main

import (
    "bufio"
    "fmt"
    "strings"
    "os"
    "reflect"
)
const TOKEN string = ":="

func validate(expr string) {
    fmt.Println("var type: ", reflect.TypeOf(expr))
    if strings.Contains(expr, TOKEN) {
        fmt.Println(expr, "contains works")
    } else {
        fmt.Println("error with contains")
    }

    if strings.HasSuffix(expr, TOKEN) {
        fmt.Println(expr, "suffix works")
    } else {
        fmt.Println("error with suffix")
    }
}

func main() {
    var expr2 string
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("type something finished with ':='")
    expr1, _ := reader.ReadString('
')
    fmt.Scanln(&expr2)

    fmt.Println("validation with reader: ")
    validate(expr1)
    fmt.Println()
    fmt.Println("validation with Scanln: ")
    validate(expr2)
}
  • 写回答

1条回答 默认 最新

  • dro60731 2016-10-30 00:47
    关注

    As @Tim mentioned the output of reader.ReadString(' ') includes ' ' as the last character and fmt.Scanln does not do that. You can either do const TOKEN string = ":= " or remove the ' ' from the end of the string.

    Update :

    There are cases where occurs as a suffix instead of the usually expected (Windows Machines ?)

    fmt.Scanln handles that case as well, as per fmt godoc.

    In all the scanning functions, a carriage return followed immediately by a newline is treated as a plain newline ( means the same as ).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入