Ruby:你如何在sprintf输出中包含%符号?

时间:2017-06-16 09:46:39

标签: ruby

我有:

sprintf("%02X" % 13)

哪个输出:

=>"OD"

我希望我的输出为:

=>"%0D"

我试过了:

sprintf("\%%02X" % 13)

但我收到错误warning: too many arguments for format string。同样适用于:

sprintf("%%02X" %  13)

是否可以单独在sprintf中添加前导%

3 个答案:

答案 0 :(得分:10)

文字%必须以%%转义:

sprintf('%%') #=> "%"

此外,您应该使用sprintf %,而不是两者:

sprintf('%%%02X', 13)  #=> "%0D"
#               ^
#          comma here

'%%%02X' % 13          #=> "%0D"
#        ^
# percent sign here

如果这些符号太多,您可以将字符串文字分开以使其更明显:

sprintf('%%' '%02X', 13)
#=> "%0D"

在Ruby中,'foo' 'bar'等同于'foobar',即相邻的字符串文字由解释器自动连接。

答案 1 :(得分:4)

sprintf('%%%02X', 13)
  # => "%0D"

来自the ruby docs

  

字段:%|其他格式:将显示百分号本身。没有争论。

即。您必须使用双%转义%%字符;就像你在常规字符串中使用\一样逃避单个\\

答案 2 :(得分:1)

另一种可能性是使用Integer#to_s

"%" + 13.to_s(16).rjust(2, '0').upcase
#=> "%0D"

由于%的{​​{3}}大于+,您还可以写:

"%" + "%02X" % 13
#=> "%0D"

相当于

"%" + ("%02X" % 13)
#=> "%0D"