100000000
1000
100
100000
10000
我需要从string的结尾开始插入char(,),从结束后的三个char开始插入,然后在每2个char之后重复插入(,)
输出
10,00,00,000
1,000
100
1,00,000
10,000
任何提示家伙我怎么能这样做,我需要从字符串的末尾开始插入char(',')。
谢谢!
答案 0 :(得分:3)
这里有两种方法,第一种是使用正则表达式,最后一种只是在循环中插入逗号。
a = %w| 100000000 1000 100 100000 10000 |
#=> ["100000000", "1000", "100", "100000", "10000"]
#1使用正则表达式
r = /
(?<=\d) # match digit in positive lookbehind
\d{2} # match two digits
(?= # begin positive lookahead
(?:\d{2})* # match two digits, repeated zero or more times
\d # match last digit
\z # match end of string
) # end positive lookahead
/x # extended mode
a.each { |s| puts "#{s} -> #{ s.gsub(r) { |ss| ',' + ss } }" }
100000000 -> 10,00,00,000
1000 -> 1,000
100 -> 100
100000 -> 1,00,000
10000 -> 10,000
这个正则表达式与@Avinish早先给出的类似,但我选择使用正面的lookbehind而不是捕获组,并以扩展模式呈现它以帮助读者理解它是如何工作的。我会在这里使用正则表达式。
#2插入逗号
如果您不想使用正则表达式,可以确定要插入的最后一个逗号的位置(下面是p
),要插入的逗号数(下面是n
)然后插入它们,回到前面:
def insert_commas(string)
sz = string.size
str = string.dup
p = sz - 3
n = (sz - 2)/2
n.times { str.insert(p, ','); p -= 2 }
str
end
a.each { |s| puts "#{s} -> #{insert_commas(s)}" }
100000000 -> 10,00,00,000
1000 -> 1,000
100 -> 100
100000 -> 1,00,000
10000 -> 10,000
我dup
编辑string
假设你不想改变string
。
可替换地,
def insert_commas(string)
sz = string.size
return string if sz < 4
p = sz.even? ? 1 : 2
string[0,p] + string[p..-2].gsub(/\d{2}/) { |s| ",#{s}" } + string[-1]
end
答案 1 :(得分:1)