为何Ruby的String#delete方法无法删除字符串中的`-`字符?
Ruby String#delete方法中连字符的使用误区
你对String#delete参数的核心误解在于:参数里的-是字符范围的分隔符,并非单纯的待删除字符,它的位置会改变Ruby对它的解析逻辑。
- 当你写
delete(" -().")时,-夹在空格和(之间,Ruby会将其解析为「ASCII码从空格(32)到((40)的字符范围」。而-本身的ASCII码是45,不在这个范围内,所以目标字符串里的-不会被删除。 - 当你写
delete(" ()-.")时,-位于参数末尾,后面没有其他字符,Ruby会将其识别为普通待删除字符,因此能正常清除目标字符串里的-。
如果要确保-被当作普通字符处理,有两种可靠方式:
- 将
-放在参数的开头或结尾 - 用反斜杠转义
-,比如delete(" \-().")
内容的提问来源于stack exchange,提问作者jbk
相关产品推荐
相关产品推荐

