You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:36:29