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