【问题标题】:How to remove surrounding quotes inside a String in Erlang?如何在Erlang中删除字符串内的引号?
【发布时间】:2020-11-20 16:11:23
【问题描述】:

我正在使用epgsql 在 Erlang 中查询数据库。它返回包含引号的字符串结果,如下所示:"what_was_in_the_row"。如何在处理结果之前删除这些引号?

【问题讨论】:

  • 你确定它有双引号吗?你怎么检查? io:format("~p", ...) 将在字符串周围打印一个额外的双引号。
  • @Dogbert 我将它和另一个值放入带有 io_lib:format("~p ~p", [Value1, Value2]) 的字符串中,然后通过套接字将其发送到 Python 程序。 python 程序认为它带有引号。我目前正在剥离 Python 端的引号。

标签: string erlang


【解决方案1】:

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

如果你调用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"]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2011-05-12
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多