如何正确交换字符串中的某些字符

时间:2017-07-07 07:02:08

标签: ruby string

我有一个代表日期的字符串:

"12.27.1995"

我需要交换月份和日期来获得:

"27.12.1995"

我做了:

date = "12.27.1995"

month = date[0]+date[1]
day = date[3]+date[4]

date[0] = day[0]
date[1] = day[1]
date[3] = month[0]
date[4] = month[1]

它运作良好,但对我来说看起来很糟糕。是否可以使用更少的代码使其更可靠?

4 个答案:

答案 0 :(得分:7)

由于您的字符串代表日期,您可能希望使用Date对象,strptime来解析原始字符串,strftime以所需格式输出:

require 'date'

date = Date.strptime("12.27.1995", "%m.%d.%Y")
puts date.strftime("%d.%m.%Y")
# 27.12.1995

答案 1 :(得分:6)

是。也许是这样的:

date = "12.27.1995"
m, d, y = date.split(".")
date = [d, m, y].join(".")

答案 2 :(得分:1)

虽然@sawa的答案完全有效并且应该在这里使用,但我会展示一些错误的技术,不应该在这里使用,但可能是有助于任何人交换字符串的两个固定部分:

"12.27.1995".tap { |s| s[0..1], s[3..4] = s[3..4], s[0..1] }
#⇒ "27.12.1995"

答案 3 :(得分:1)

不优雅,但使用正则表达式捕获方式:

/(\d{1,2})\.(\d{1,2})\.(\d{4})/.match "12.27.1995"
[$2, $1, $3].join('.') #=> "27.12.1995"