start_with不适用于ruby中的反斜杠

时间:2016-02-16 13:00:08

标签: ruby

我有以下字符串 -

abcdefgh;
lmnopqrst;

在做string = string.split(";")时,我得到了 -

["abcdefgh", "\nlmnopqrst"]

现在我做的时候 -

string[1].start_with?("\\")

该函数返回false。而如果我这样做 string[0].start_with?("a") 该函数返回true。

我是ruby的新手,无法理解这种行为。谁能告诉我我做错了什么。

4 个答案:

答案 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?回复错误。