Rails中strip方法失效求助:无法去除字符串首尾空格及引号
解决Ruby字符串去除开头空白及引号的问题
首先得理清两个关键点,帮你排查操作没生效的原因:
- 你定义字符串时的双引号
"是Ruby的字符串语法标记,并不是字符串内容的一部分,所以用gsub!('"','')根本找不到要替换的字符,自然不会有任何效果。 - 关于
strip!:这个方法是原地修改原字符串——如果字符串确实有前后空白需要移除,它会修改原字符串并返回修改后的版本;但如果字符串本来就没有前后空白,它会返回nil。要是你写了s = s.strip!,万一后续重复执行,s就会变成nil,这可能是你误以为没生效的原因之一。
正确的处理方案:
去除开头/前后空白
如果你想同时去掉字符串首尾的所有空白字符(包括空格、\r、\n),推荐用不带!的strip方法,它会返回一个新的处理后的字符串,不会影响原字符串,还能避免nil的坑:s = " \r\n Displays the unique ID number assigned to the\r\nAlias Person." s = s.strip # 处理后结果:"Displays the unique ID number assigned to the\r\nAlias Person."要是你只想去掉开头的空白,用
lstrip就够了:s = s.lstrip # 处理后结果:"Displays the unique ID number assigned to the\r\nAlias Person."如果字符串内容真的包含双引号
假设你的字符串实际内容里有双引号(比如定义时用了单引号或者转义),比如:s = "\" \r\n Displays the unique ID number assigned to the\r\nAlias Person.\""这时候要去掉引号,可以用
gsub(同样推荐不带!的版本,逻辑更清晰):# 先去引号再处理空白,或者顺序反过来都可以 s = s.gsub('"', '').strip
小提醒:
Ruby中带!的方法(比如strip!、gsub!)都是原地修改原对象,返回值可能是修改后的对象或者nil;而不带!的方法会返回一个新对象,原对象保持不变。如果不是特别需要原地修改,优先用不带!的方法,代码更不容易出问题哦。
内容的提问来源于stack exchange,提问作者Haseeb Ahmad
相关产品推荐
相关产品推荐

