【问题标题】:Converting a tuple to a string in erlang language将元组转换为 erlang 语言中的字符串
【发布时间】:2015-02-19 15:27:50
【问题描述】:
Tuple={<<"jid">>,Member},

Tuple_in_string=lists:flatten(io_lib:format("~p", [Tuple])),

输出如下:

"{<<\"jid\">>,\"sdfs\"}"

但我希望这个输出没有像这样的斜线

"{<<"jid">>,Member}"

任何指针?

我已经尝试了所有答案,但最后是 io:format("\"~s\"~n", [Tuple_in_string])。什么是 "{>,Member}" 但它不是一个字符串。它是一个原子。我需要可以应用 concat 操作的字符串。任何指针?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    你可以这样打印:

    io:format("\"~s\"~n", [Tuple_in_string]).
    

    打印出来:

    "{<<"jid">>,"sdfs"}"
    

    【讨论】:

    • :io:format("\"~s\"~n", [Tuple_in_string]).=>"{>,"sdfs"}"。当我尝试将它与产生错误的字符串连接起来。最后我在变量 V 中收集了结果(“{>”sdfs“}”),并且 is_atom(V) 是真的。但我需要一个字符串
    【解决方案2】:

    这里的 \ 表示后面的 " 是字符串的一部分,而不是字符串分隔符。它们不存在于字符串本身中。它们出现是因为您使用漂亮的打印格式 ~p。如果您使用字符串格式 ~s 它们不会出现在显示中。

    1> io:format("~p~n",["a \"string\""]).               
    "a \"string\""
    ok
    2> io:format("~s~n",["a \"string\""]).
    a "string"
    ok
    3> length("a \"string\""). % is 10 and not 12                     
    10
    

    【讨论】:

      【解决方案3】:

      首先,您不需要在此处展平列表:

      Tuple_in_string=lists:flatten(io_lib:format("~p", [Tuple])),
      

      Erlang 有iodata() 的概念,这意味着可打印的东西可以在嵌套列表中并且大多数函数都可以处理它们,所以你应该只留下:

      Tuple_in_string = io_lib:format("~p", [Tuple]),
      

      其次,当你使用~p 时,你告诉Erlang 以这样的方式打印该术语,它可以被复制并粘贴到控制台中。这就是为什么所有双引号都被转义了\"。使用~s,表示“视为字符串”。

      1> 38> Tuple = {<<"jid">>,"asdf"}.
      {<<"jid">>,"asdf"}
      2> IODATA = io_lib:format("~p", [Tuple]).
      [[123,[[60,60,"\"jid\"",62,62],44,"\"asdf\""],125]]
      3> io:format("~s~n", [IODATA]).
      {<<"jid">>,"asdf"}
      ok
      

      【讨论】:

        【解决方案4】:
        L =  Packet_in_tuple_form={xmlel,<<"message">>,[{<<"id">>,<<"rkX6Q-8">>},{<<"to">>,<<"multicast.devlab">>}],[{xmlel,<<"body">>,[],[{xmlcdata,"Hello"}]},{xmlel,<<"addresses">>,[{<<"xmlns">>,<<"http://jabber.org/protocol/address">>}],[{xmlel,<<"address">>,[{<<"type">>,<<"to">>},"{<<\"jid\">>,\"sds\"}",{<<"desc">>,"Description"}],[]}]}]}.
        

        给我:

        {xmlel,<<"message">>,
           [{<<"id">>,<<"rkX6Q-8">>},{<<"to">>,<<"multicast.devlab">>}],
           [{xmlel,<<"body">>,[],[{xmlcdata,"Hello"}]},
            {xmlel,<<"addresses">>,
                   [{<<"xmlns">>,<<"http://jabber.org/protocol/address">>}],
                   [{xmlel,<<"address">>,
                           [{<<"type">>,<<"to">>},
                            "{<<\"jid\">>,\"sds\"}",
                            {<<"desc">>,"Description"}],
                           []}]}]}
        

        地址字段中的 \ 是转义字符。 您可以通过检查字符串的长度来验证。

        【讨论】:

          猜你喜欢
          • 2015-04-19
          • 2015-04-20
          • 1970-01-01
          • 2012-03-14
          • 2017-06-09
          • 2013-02-14
          • 2017-04-30
          • 2016-03-14
          • 2012-01-19
          相关资源
          最近更新 更多