侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

实现一个字符串截取方法

2025-12-14 / 0 评论 / 4 阅读

题目

实现一个字符串截取方法

信息

  • 类型:问答
  • 难度:⭐

考点

方法定义,字符串操作,条件判断

快速回答

定义一个方法,当输入字符串长度超过5时返回前5字符加'...',否则返回原字符串。需处理空值情况:

  • 使用to_s处理nil值
  • length检查字符串长度
  • 通过三元运算符或条件语句实现分支逻辑
  • 使用字符串索引[0,5]截取前5字符
## 解析

问题要求

实现一个方法,接收一个参数:
1. 当字符串长度>5时,返回前5字符+'...'
2. 否则返回原字符串
3. 空值(nil)需返回空字符串

解决方案代码

def truncate_string(str)
  str = str.to_s
  str.length > 5 ? str[0,5] + '...' : str
end

原理说明

  • 空值处理str.to_s将nil转换为空字符串(""),避免NoMethodError
  • 长度判断str.length获取字符串长度,>5时触发截取
  • 字符串截取str[0,5]从索引0开始取5个字符
  • 三元运算符条件 ? true结果 : false结果简化条件逻辑

最佳实践

  • 使用to_s防御nil比显式if str.nil?更简洁
  • 优先选择三元运算符保持代码简洁(适用于简单分支)
  • 方法命名应体现功能,如truncate_string明确表示截断操作

常见错误

错误代码问题说明修正方案
str[0..4] + '...'范围索引包含结束位置,可能多取字符使用str[0,5]明确长度
if str.length > 5(未处理nil)传入nil时报错添加str.to_s
返回nil而非空字符串不符合需求确保返回String类型

扩展知识

  • 安全导航操作符:Ruby 2.3+可用str&.length避免nil错误,但仍需转换:(str&.length || 0) > 5
  • 字符串冻结:频繁操作字符串时,'...'.freeze可减少内存分配
  • 参数默认值:可扩展方法支持自定义截取长度:
    def truncate(str, limit=5) ... end