在Elixir中:字符串格式

时间:2018-07-27 13:19:27

标签: format erlang elixir

我有一个转换规则:

"0549$2"

如何将此规则应用于Elixir中的字符串? 在红宝石中,我使用:

format("0549%2$s", *["88", "77"])
=> "054977"

在长生不老药中,我写道:

:io.format("0549%2$s", ["88", "77"])
** (ArgumentError) argument error
    (stdlib) :io.format(#PID<0.54.0>, "0549%2$s", ["88", "77"])

因为来自erlang的:io.format无法理解这种格式

2 个答案:

答案 0 :(得分:3)

因此,您要用列表中的相应元素(从1开始索引)替换所有$,后跟一个整数吗?这是使用Regex.replace/3的一种方法:

defmodule A do
  def format(string, list) do
    Regex.replace(~r/\$(\d+)/, string, fn _, index ->
      Enum.at(list, String.to_integer(index) - 1)
    end)
  end
end

IO.inspect A.format("0549$2", ["88", "77"])
IO.inspect A.format("0549$1", ["88", "77"])

输出:

"054977"
"054988"

答案 1 :(得分:3)

您可以使用:io_lib.format/2。它生成字符列表,之后可以将其转换为二进制:

"0549~i~s"
|> :io_lib.format(~w[77 88])
|> to_string()
#⇒ "054988"
  • ~i停留在“忽略下一个词”
  • ~s用于将参数视为二进制

边注: io.format 将格式化后的字符串输出到IO设备,并返回:ok