2013-02-28 126 views
1

爲什麼我的foo()函數打印字符串「YAAR」的長度爲5?對Ruby長度屬性感到困惑

def foo() 
map = Hash.new 
File.open('dictionary.txt').each_line{ |s| 
    word = s.split(',') 
    if word.any? { |b| b.include?('AA') } 
     puts word.last 
     puts word.last.length 
    end 
    } 
end 

someFile.txt

265651,YAAR 
265654,YAARS 

輸出

YAAR 
5 
YAARS 
6 
+2

的長度沒有說謊。試試'puts「>」+ word.last.inspect +「<」'看看會出現什麼。 – 2013-02-28 01:06:50

回答

3

你在兩個字符串的結尾得到一個換行符 '\ n'。所以,你的分裂正在接收:

"265651,YAAR\n" 
"265654","YAARS\n" 
+0

他們都比預期的更長 - 但是這不會被each_line刪除嗎? – 2013-02-28 01:08:11

+0

@pst:[顯然不是!](http://www.ruby-doc.org/core-2.0/String.html#method-i-each_line)奇怪。 – Ryan 2013-02-28 01:08:33

+0

@minitech離開日常Ruby *路*太久了。我希望在'puts'輸出中有一個空白,然後..? – 2013-02-28 01:09:51

3

從文件中讀取,你會得到所有行的末尾的新行字符(\ n)的(也許除了最後一個)

代替

word = s.split(',') 

在循環,使用此

word = s.split(',').map { |s| s.chomp }