如何识别末尾为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
相关产品推荐
相关产品推荐

