题目
实现一个字符串截取方法
信息
- 类型:问答
- 难度:⭐
考点
方法定义,字符串操作,条件判断
快速回答
定义一个方法,当输入字符串长度超过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