如何在RubyonRails3中将非英语字符串小写?str="Привет"#Russianputsstr[0].ord#=>1055str.downcase!putsstr[0].ord#=>1055(Shouldbe1087)我希望它能在Ruby1.8.7和Ruby1.9.2中工作。 最佳答案 str="Привет"str.mb_chars.downcase.to_s#=>"привет" 关于ruby-on-rails-rails:Howtodowncasenon-English
只是想知道是否有用于从索引中提取子字符串直到字符串末尾的Ruby习惯用法。我知道str[index..-1]通过将范围对象传递给String的[]方法来工作,但它是有点笨重。例如,在Python中,您可以编写str[index:],它会隐式地为您提供字符串的其余部分。例子:s="helloworld"s[6..-1]#还有比s[6..-1]更好的东西吗? 最佳答案 引入了Ruby2.6endlessranges,这基本上消除了必须指定结束索引的需要。在你的情况下,你可以这样做:s="helloworld"s[6..]
以下代码失败world=:worldresult='hello'+worldputsresult#=>can'tconvertSymbolintoString以下代码有效world=:worldresult="hello#{world}"putsresult#=>helloworld为什么?使用ruby1.8.7 最佳答案 字符串插值是一个隐式的to_s调用。所以,像这样:result="hello#{expr}"或多或少等同于此:result="hello"+expr.to_s正如karim79所说,符号不是字符串,但符号确实具有
我不是Ruby开发人员,但我使用Capistrano进行PHP部署。我正在尝试清理脚本的输出并尝试添加unicodecheckmark如thisblog中所述.问题是如果我这样做:checkmark="\u2713"putscheckmark它输出“\u2713”而不是✓我用谷歌搜索了一下,但找不到讨论这个问题的任何地方。TLDR:如何放置或打印unicodecheckmarkU-2713?编辑我在我的Mac(OSXLion)上运行Ruby1.8.7,所以不能使用encode方法。我的shell是iTerm2中的Bash。更新[4/8/2019]添加了引用图片以防网站出现故障。
我有一个长字符串变量,想知道它是否包含两个子字符串之一。例如haystack='thisoneisprettylong'needle1='whatever'needle2='pretty'现在我需要一个像这样的析取,它在Ruby中不起作用:ifhaystack.include?needle1||haystack.include?needle2puts"needlefoundwithinhaystack"end 最佳答案 [needle1,needle2].any?{|needle|haystack.include?needle}
我相信这很容易;我无法立即从Google找到答案。我知道我可以做到这一点(对吧?):text=""File.open(path).each_linedo|line|text+=lineend#Dosomethingwithtext但这似乎有点过分,不是吗?或者这是人们在Ruby中的做法吗? 最佳答案 IO.read()正是您要找的。File是IO的子类,所以你也可以使用:text=File.read(path)没有比这更直观的了。 关于ruby-将整个文本文件作为单个字符串读取的合理方法
我想从一个字节值构建一个字符串。我目前使用:str=""str[0]=byte这似乎工作正常,但我发现它很丑陋,而且对于长度超过1个字符的字符串的可扩展性不是很好。有什么想法吗? 最佳答案 有一个比上述任何方法都简单得多的方法:Array#pack:>>[65,66,67,68,69].pack('c*')=>"ABCDE"我相信pack是在matzruby中用c语言实现的,因此对于非常大的数组,它也会快得多。此外,pack可以使用“U*”模板正确处理UTF-8。 关于Ruby:从字
纯粹出于好奇,有没有更优雅的方法来简单地获取字符串中第一个=符号之后的子字符串?以下工作回馈name=bob:string="option=name=bob"string[string.index('=')+1..-1]只是感觉不太像Ruby。这也有效:string.split('=',2)[1]同样,不是很优雅,特别是因为split正在做额外的不必要的工作。正则表达式是答案吗?对于在字符串中查找单个字符位置的简单性,我觉得这有点矫枉过正:string.match('=(.*)')[1]我不得不想象这是一个极其普遍的情况,不是有一个string.after('=')类型的方法吗?鉴于此
如何使用puts将Ruby字符串变量输出强制为n个字符,以便如果变量更长,它将被截断,如果更短,它将通过尾随或前导空格扩展?是否有一些标准方法可以做到这一点? 最佳答案 与许多其他语言一样,Ruby支持使用格式字符串:[11](pry)main:0>'%3.3s'%'f'=>"f"[12](pry)main:0>'%3.3s'%'foo'=>"foo"[13](pry)main:0>'%3.3s'%'foobar'=>"foo"如果你想在右边填充,在格式字符串中使用-:[14](pry)main:0>'%-3.3s'%'f'=>"f
这是这个问题的反面:Whycan'tstringsbemutableinJavaand.NET?在Ruby中做出这个选择仅仅是因为操作(追加等)对可变字符串有效,还是有其他原因?(如果只是效率,那似乎很奇怪,因为Ruby的设计似乎并没有高度重视促进高效实现。) 最佳答案 如您所见,这符合Ruby的设计。不可变字符串比可变字符串更有效——更少的复制,因为字符串被重复使用——但让程序员的工作更加困难。将字符串视为可变的很直观——您可以将它们连接在一起。为了解决这个问题,Java默默地将两个字符串的连接(通过+)转换为StringBuff