奇怪的String.start_with?行为

时间:2011-03-09 03:52:02

标签: ruby

我编写了一个简单的ruby脚本,它从txt文件中读取URL,然后下载这些文件。

txt文件可能包含具有尾随#字符的注释。

我正在逐行读取文件,选择并删除每一行,然后检查每一行是否以#符号开头。

现在我遇到的问题是line.start_with?("#")总是返回false,即使该行以#前导开头。

我检查过这些角色,发现line[0]确实没有#个字符;它位于line[1]

可以吗。解释这里发生了什么?它与文件的UTF-8字符编码有关吗?

THX!

4 个答案:

答案 0 :(得分:1)

尝试使用puts line.inspect查看字符串中是否有任何未注意到的内容。

答案 1 :(得分:0)

你可能想先尝试剥离,例如

line.strip.start_with?("#")

答案 2 :(得分:0)

你说在检查之前你正在剥离字符串。但是,我猜你还在领先空白。那么,你打电话给strip还是strip!?普通strip方法返回剥离的字符串,但不更改字符串,strip!版本更改字符串;如果您只是使用strip,那么您可能会在不知不觉中丢弃被剥离的字符串,然后对仍然存在的前导或尾随空格感到困惑。

当您需要chomp时,类似的问题可能适用于chomp!的使用。

此外,没有必要同时使用chompstrip,只需strip(或strip!)就足够了chomp,或多或少,只是rstrip的限制版本,而本质上只是strip只应用于字符串的结尾。

答案 3 :(得分:0)

我找到了问题的原因:strange characters at beginning of file

......但不是解决方案。