我制作了一个方法serial_bn
,它采用印度语 - 阿拉伯数字并返回相应的孟加拉语数字:
def serial_bn(var)
if var == "1"
return "১"
end
if var == "2"
return "২"
end
if var == "3"
return "৩"
end
if var == "4"
return "৪"
end
if var == "5"
return "৫"
end
if var == "6"
return "৬"
end
if var == "7"
return "৭"
end
if var == "8"
return "৮"
end
if var == "9"
return "৯"
end
if var == "0"
return "০"
end
end
我想将数字的每个数字作为字符串传递给上面的方法。例如,对于"1234"
,我希望输出类似于"১২৩৪"
,而中间没有空格。
我试过了:
"1234".to_s.split('').each do |i|
serial_bn(i.chr)
返回输出,其间有空格:
"১ ২ ৩ ৪"
任何帮助?
答案 0 :(得分:8)
"1234".tr("1234567890", "১২৩৪৫৬৭৮৯০")
# => "১২৩৪"
或者,我不确定目标语言,但可能这也应该有效:
"1234".tr("0-9", "০-৯")
# => "১২৩৪"
答案 1 :(得分:2)
让我建议你更多"传统"处理问题。
由于映射是稳定的,因此创建一个常量:
SERIAL_BN_MAP = {
1 => '১',
2 => '২',
3 => '৩',
4 => '৪',
5 => '৫',
6 => '৬',
7 => '৭',
8 => '৮',
9 => '৯',
0 => '০'
}.freeze
现在方法(使用Integer#digits
):
def convert(number)
number.digits.reverse.map { |d| SERIAL_BN_MAP[d] }.join
end
用法:
convert(1234)
#=> "১২৩৪"
答案 2 :(得分:0)
您可以使用gsub
2.2.5 :011 > text = "১ ২ ৩ ৪"
2.2.5 :010 > text.gsub(' ','')
=> "১২৩৪"
另外,我建议您使用案例陈述 -
def serial_bn(var)
case var
when "1" then "১"
when "2" then "২"
# etc
else
# handle other input
end
end
答案 3 :(得分:0)
字符串有tr
方法,可替换字符:
p "123409".tr( "1234567890", "১২৩৪৫৬৭৮৯০") # => "১২৩৪০৯"
答案 4 :(得分:0)
我会将Andrey和sawas的答案结合起来,因为它们在某种语言特定的转换类中都有很好的实现:
SERIAL_CONVERSION = "১২৩৪৫৬৭৮৯০"
EN_SERIAL_DIGITS = "1234567890"
( ... )
def convert_serial(serial)
serial.tr(EN_SERIAL_DIGITS, SERIAL_CONVERSION)
end
你可以用一种更好的方式将EN数字映射到另一种语言,甚至可能让类继承自EnglishDigit类或其他东西,这样你就不需要复制EN_SERIAL_DIGITS了。真的,但我总是在这里使用某种常数。