Ruby代码遇空格输入触发index out of string错误求助
嘿,这个问题我之前写Ruby的时候也踩过坑!咱们先来搞清楚为啥会报错,再给你几个简单的解决办法~
为啥会触发IndexError?
你原代码的问题出在索引不匹配上:当你跳过空格的时候,循环变量i还在正常递增,但temp字符串的长度并没有跟着涨。举个具体的例子,输入hello world时:
- 当
i从0到5,你给temp[0]到temp[5]依次赋值h、e、l、l、o,此时temp的长度是6,有效索引范围是0-5。 - 接下来
i=6是空格,你执行next跳过了赋值,temp的长度还是6。 - 然后
i=7,你想给temp[7]赋值w,但temp现在最长只能到索引5,自然就触发了“索引超出字符串范围”的错误。
解决办法1:手动循环但用追加方式(修复原思路)
不用纠结索引,遇到非空格字符直接追加到temp末尾就行,这样temp的长度会自动跟着增长,完全不会有越界问题:
input = gets.to_s.chomp temp = String.new input.each_char do |char| next if char == " " temp << char # 用<<追加字符,比索引赋值安全多了 end puts "#{temp},END" gets
解决办法2:用Ruby内置方法一行搞定(更简洁)
Ruby的字符串有超多内置方法,完全不用自己写循环就能实现需求,代码还更清爽:
- 用
delete直接删掉所有空格:
input = gets.to_s.chomp temp = input.delete(" ") puts "#{temp},END" gets
- 或者用
gsub把空格替换成空字符串:
input = gets.to_s.chomp temp = input.gsub(" ", "") puts "#{temp},END" gets
这两种方法都是Ruby的惯用写法,不仅不容易出错,可读性也更强。
内容的提问来源于stack exchange,提问作者big bad programmer
相关产品推荐
相关产品推荐

