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

如何识别末尾为y的索引?及实现符合条件的字符串筛选方法

解决你的两个字符串处理问题

1. 如何识别最后一个字母为y的索引?

这里分两种常见场景,看你具体需求:

  • 单个字符串中,找到最后一个'y'字符的位置:
    直接用字符串的rindex方法就行,它会返回目标字符最后一次出现的索引。如果字符串里没有'y',会返回nil,记得做判断哦。示例代码:
    str = "happy coding buddy"
    last_y_index = str.rindex('y') # 返回 15,对应最后一个'y'的位置
    
  • 数组中,找到所有末尾为'y'的字符串的索引:
    用each_with_index遍历数组,筛选符合条件的索引即可:
    words = ["apple", "happy", "ruby", "sunny"]
    target_indices = []
    words.each_with_index do |word, idx|
      target_indices << idx if word[-1] == 'y'
    end
    # target_indices 结果是 [1,2,3]
    

2. 修复你的筛选方法:返回长度≥6且以'y'结尾的字符串数组

你的代码返回空结果的问题很明确——你搞错了变量引用!你用了words.length(这是整个数组的长度)和words[-1](这是数组的最后一个元素),但你需要判断的是当前遍历的单个字符串的长度和末尾字符呀!

举个正确的Ruby示例(从你的代码风格推断你用的是Ruby):

def long_y_words(words)
  words.select do |word|
    # 重点:用 word.length 而非 words.length,用 word[-1] 判断当前字符串的末尾
    word.length >= 6 && word[-1] == 'y'
  end
end

# 测试验证
test_words = ["fantasy", "happy", "mystery", "coding", "delivery"]
puts long_y_words(test_words).inspect # 输出 ["fantasy", "mystery", "delivery"]

另外,用word.end_with?('y')会更灵活,比如要忽略大小写的话,可以写成word.downcase.end_with?('y'),适配更多场景。

如果是JavaScript,逻辑完全一致,语法稍作调整:

function longYWords(words) {
  return words.filter(word => word.length >= 6 && word.slice(-1) === 'y');
}

本质问题就是遍历数组时误引用了数组本身的属性,而非当前元素的属性,导致条件永远不满足,所以返回了空数组~


内容的提问来源于stack exchange,提问作者joshingjones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:35:18