我有以下字符串 -
abcdefgh;
lmnopqrst;
在做string = string.split(";")
时,我得到了 -
["abcdefgh", "\nlmnopqrst"]
现在我做的时候 -
string[1].start_with?("\\")
该函数返回false。而如果我这样做
string[0].start_with?("a")
该函数返回true。
我是ruby的新手,无法理解这种行为。谁能告诉我我做错了什么。
答案 0 :(得分:3)
我不知道,但是String[1][0]
(字符串中的第一个字符)返回"\n"
所以也许使用此
string[1].start_with?("\n")
答案 1 :(得分:1)
这是因为“\ n”实际上不以反斜杠开头。它是换行符,被认为是单个字符,因此只显示前面有转义字符\
。
所以:
string[1].start_with?("\n")
将返回true。
您已尝试使用string[1].start_with?("\\")
进行搜索,因此您似乎意识到需要使用\\
来逃避反斜杠字符。
如果您的输入字符串如下所示:
\abcdefgh;
lmnopqrst;
然后在.split(';')
之后,您生成的数组将如下所示:
["\\abcdefgh;", "\nlmnopqrst"]
现在string[0].start_with?("\\")
将返回true
,因为第一个字符串实际上以一个反斜杠开头,该反斜杠在控制台中以转义字符显示。
答案 2 :(得分:0)
你可以尝试
'\nhello world'.start_with?("\\") # return true
"\nhello world".start_with?("\\") # return false
因为'\n'
是两个字符(\
和n
),但"\n"
是一个字符(new line char
)。
答案 3 :(得分:0)
第一个字符不是"\"
- 在第一个示例中为"\n"
,在第二个示例中为"\\"
。 "\n"
和"\\"
在此上下文中实际上是单个字符,即使它们看起来像两个字符。
"\n"
!= "\\"
,所以start_with?
回复错误。