如何删除Erlang中字符串内的周围引号?

hor*_*air 4 string erlang

我正在使用epgsqlErlang 查询数据库。它返回字符串结果包括它们周围像这样引号:"what_was_in_the_row"。如何在处理结果之前删除这些引号?

Pas*_*cal 9

控制格式~p(漂亮的打印)保留有关打印的变量类型的信息。您正在打印一个字符串,例如,在 erlang 中,由可打印字符组成的标准整数列表[101,102,103]显示为"efg"在 shell 中。

如果你调用io_lib:format("~p",[[101,102,103]]).,你会得到["\"efg\""]需要一些解释的结果。

  • 周围的括号表示一个列表,它是 的返回值类型io_lib:format/2
  • 然后第一个双引号表示另一个可能是字符串的列表,它是语法糖,但它不是结果的一部分(我说可能是因为任何看起来像字符串的列表都将显示为带有漂亮打印的字符串),
  • 最后\"是一个表示单个字符的转义序列“

您可以评估每个字符串的长度以验证差异:

  • 3 = 长度(“efg”)。
  • 5 = 长度("\"efg\"")。

如果要获取不带引号的字符串,必须使用控制格式 ~s

1> [Res] = io_lib:format("~s",[[101,102,103]]).
["efg"]
2> length(Res).
3
3> [Res] = io_lib:format("~s",[Res]).          
["efg"]
Run Code Online (Sandbox Code Playgroud)

当然,最后一行表明我的例子很愚蠢。使用io_lib:format("~s ~s!",["Hello","world"]).或更复杂的格式,结果的类型为chars()char()或的列表chars()