Ruby如何将数组转换为无多余转义的指定格式字符串
Ruby数组转指定格式字符串的实现方案
核心原因说明
你看到的"[\"ruby\"]"带反斜杠的输出,是Ruby交互式环境(irb、pry等)展示字符串inspect结果的特有效果,反斜杠是环境为了标识引号嵌套自动加的转义标记,不是字符串本身的内容,也不是print方法直接输出到控制台的实际效果。
具体实现方案
1. 使用print方法实现(最简便)
Array#to_s和Array#inspect返回的字符串原生内容就是["ruby"]格式,直接输出即可,需要外层包裹引号的话做字符串拼接即可:
a = ["ruby"] # 输出无外层引号的格式:["ruby"] print a.inspect # 输出双引号包裹的格式:"["ruby"]" print "\"#{a.inspect}\"" # 输出单引号包裹的格式:'["ruby"]' print "'#{a.inspect}'"
以上所有拼接结果本身就是字符串类型,完全符合要求。
2. 使用p方法实现
p方法默认会调用对象的inspect方法,会自动给输出内容加引号和转义,所以需要先生成完全符合目标格式的字符串再输出:
a = ["ruby"] # 输出双引号包裹的目标格式 target_str = "\"[\\\"#{a[0]}\\\"]\"" p target_str # 单引号包裹版本 target_str = "'[\"#{a[0]}\"]'" p target_str
如果需要适配多元素数组,可以批量处理元素拼接:
a = ["ruby", "rails", "sinatra"] content = a.map { |item| "\"#{item}\"" }.join(",") target_str = "\"[#{content}]\"" p target_str
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

