Go 消除“错误”的困难";作为字符串分隔符。(戈朗)

Go 消除“错误”的困难";作为字符串分隔符。(戈朗),go,Go,当从键盘读取字符串时,我正在努力删除“\n”作为字符串分隔符。目标是识别键盘输入接收到的字符串的最后一个字母 但事实证明,他并没有将“n”作为最后一个字母。我认为他正在保存“\n”作为最后的输入 测试:尝试写“ian”,它将导致“找不到” 注意:我已经尝试过使用“TrimSuffix”函数,但没有解决这个问题 package main import ( "bufio" "fmt" "os" "

当从键盘读取字符串时,我正在努力删除“\n”作为字符串分隔符。目标是识别键盘输入接收到的字符串的最后一个字母

但事实证明,他并没有将“n”作为最后一个字母。我认为他正在保存“\n”作为最后的输入

测试:尝试写“ian”,它将导致“找不到”

注意:我已经尝试过使用“TrimSuffix”函数,但没有解决这个问题

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {

    str := bufio.NewReader(os.Stdin)

    fmt.Println("Please enter a string:")

    strReciv, _ := str.ReadString('\n')

    //---------------------------------------------

    s1 := strings.HasPrefix(strReciv, "i")
    s2 := strings.Contains(strReciv, "a")
    s3 := strings.HasSuffix(strReciv, "n")

    if s1 && s2 && s3 {

        fmt.Println("Found!")
    } else {
        fmt.Println("Not Found")
    }

}

字符串。修剪适合我,如图所示

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {

    str := bufio.NewReader(os.Stdin)

    fmt.Println("Please enter a string:")

    sin, _ := str.ReadString('\n')
    strReciv := strings.Trim(sin, "\n")

    //---------------------------------------------

    s1 := strings.HasPrefix(strReciv, "i")
    s2 := strings.Contains(strReciv, "a")
    s3 := strings.HasSuffix(strReciv, "n")

    if s1 && s2 && s3 {

        fmt.Println("Found!")
    } else {
        fmt.Println("Not Found")
    }

}

经过大量调查,最终成功:)

我还需要删除
\r

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {

    str := bufio.NewReader(os.Stdin)

    fmt.Println("Please enter a string:")

    strIn, _ := str.ReadString('\n')
    strReciv := strings.Replace(strIn, "\r\n", "", -1)

    //---------------------------------------------

    s1 := strings.HasPrefix(strReciv, "i")
    s2 := strings.Contains(strReciv, "a")
    s3 := strings.HasSuffix(strReciv, "n")

    if s1 && s2 && s3 {

        fmt.Println("Found!")
    } else {
        fmt.Println("Not Found")
    }

}
回车
术语CRLF指回车(ASCII 13\r)换行(ASCII 10\n)。但是,在当今流行的操作系统中,它们用于表示行的终止,处理方式有所不同。

是的,
ReadString
的文档说:“返回一个包含数据的字符串,直到并包括分隔符”。为什么
TrimSuffix
不起作用?您是否尝试过
TrimSpace
?TrimSpace会删除空白,我不希望这样,我只希望在最后删除“\n”。我做了一个测试,将分隔符替换为“”(空格),然后工作,他将“n”标识为最后一个字母。我不知道为什么当分隔符为“\n”时,他看不到“n”。
ReadString
返回字符串末尾的分隔符。如果我输入“ian”并单击“enter”,在我的Linux机器上,
streciv
的字节表示为
[105 97 110 10]
,其中10是最终的LF(换行符)。这就是您的测试
s3
失败的原因-后缀不是'n',而是换行符'\n'。EliBendersky,是的,这是我发现不起作用的结论。现在,我需要找到一种方法来删除
s3
最后一句中的“enter”。我的朋友:(为了使这一点更具平台无关性,请看bufio.Scanner是如何做到的。它基本上是对
\r
的查找和替换,如果它存在的话。
\n
是分隔符吗?@filpe在做问题时总是提到它是microsoft windows,有很多奇怪之处