【发布时间】:2021-05-04 19:46:13
【问题描述】:
当从键盘读取字符串时,我正在努力删除“\ 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")
}
}
【问题讨论】:
-
是的,
ReadString的文档说:“返回一个字符串,其中包含直到并包括分隔符的数据”。为什么TrimSuffix不起作用?你试过TrimSpace吗? -
TrimSpace 删除空格,我不想要那个,我只想在最后删除“\n”。我做了一个测试,将分隔符交换为“”(空格)并工作,他将“n”识别为最后一个字母。我不知道为什么当分隔符是“\n”时,他一直看不到“n”。
-
ReadString返回字符串末尾的分隔符。如果我输入“ian”并单击“Enter”,在我的 Linux 机器上,strReciv的字节表示为[105 97 110 10],其中 10 是最后的 LF(换行符)。这就是您的测试s3失败的原因 - 后缀不是“n”,而是换行符“\n”。 -
@EliBendersky,是的,这是我发现行不通的结论。现在我需要找到一种方法来删除
s3的最后一个“输入”。
标签: go