Ruby中这两个实现字符串替换的方法有何不同?为什么用FOR循环会报错?解决方法
Ruby中这两个实现字符串替换的方法有何不同?为什么用FOR循环会报错?
第一个:用each实现的字符替换函数如下
第二个:用for循环实现的
第二个方法报错
这是为什么呢?怎么解决?请高手帮忙!
------解决方案--------------------
又测试了下,是因为你的Array类型数据越界了
arr的数据最大是arr[length-1]
arr[length]是Nil,而NilClass是没有index方法,所以报错了。
第一个:用each实现的字符替换函数如下
- Perl code
def findreplace(str,str1) file=File.open("c:\\test.rb", 'r+') arr=file.readlines arr.each do |x| y= x.index(str) x.gsub!(str,str1) puts arr unless y==nil end end
第二个:用for循环实现的
- Perl code
def findreplace2(str,str1) #str='unless' file = File.open("c:\\test.rb", 'r+') arr = file.readlines for i in 1..arr.length do x = arr[i].index(str) if x != nil arr[i].gsub!(str, str1) puts arr end end end
第二个方法报错
- Perl code
C:\Documents and Settings\hongk\My Documents\NetBeansProjects\RubyCheatApplication\lib\main.rb:57:in `findreplace2': undefined method `index' for nil:NilClass (NoMethodError) from C:\Documents and Settings\hongk\My Documents\NetBeansProjects\RubyCheatApplication\lib\main.rb:56:in `each' from C:\Documents and Settings\hongk\My Documents\NetBeansProjects\RubyCheatApplication\lib\main.rb:56:in `findreplace2' from C:\Documents and Settings\hongk\My Documents\NetBeansProjects\RubyCheatApplication\lib\main.rb:64
这是为什么呢?怎么解决?请高手帮忙!
------解决方案--------------------
又测试了下,是因为你的Array类型数据越界了
arr的数据最大是arr[length-1]
arr[length]是Nil,而NilClass是没有index方法,所以报错了。