Tuple={<<"jid">>,Member},
Tuple_in_string=lists:flatten(io_lib:format("~p", [Tuple])),
它输出为:
"{<<\"jid\">>,\"sdfs\"}"
但我希望这个输出没有像
这样的斜线"{<<"jid">>,Member}"
任何指针?
我已经尝试了所有答案,但最后使用了io:format(&#34; \&#34; ~s \&#34; ~n&#34;,[Tuple_in_string])。什么是geeting&#34; {&lt;&lt;&#34; jid&#34;&gt;&gt;,会员}&#34;但它不是一个string.it是一个atom.I需要字符串,我可以应用concat操作。任何指针?
答案 0 :(得分:1)
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"}],
[]}]}]}
地址字段中的\是转义字符。 您可以通过检查字符串的长度来验证相同的内容。
答案 1 :(得分:0)
您可以这样打印:
io:format("\"~s\"~n", [Tuple_in_string]).
打印:
"{<<"jid">>,"sdfs"}"
答案 2 :(得分:0)
\这里表示以下“是字符串的一部分而不是字符串分隔符。它们不存在于字符串本身中。它们出现是因为你使用漂亮的打印格式~p。如果你使用字符串format~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 :(得分:0)
首先,您不需要在此处展平列表:
Tuple_in_string=lists:flatten(io_lib:format("~p", [Tuple])),
Erlang具有iodata()
的概念,这意味着可打印的东西可以在嵌套列表中,大多数函数都可以处理它们,所以你应该只留下:
Tuple_in_string = io_lib:format("~p", [Tuple]),
其次,当您使用~p
时,您告诉Erlang以这种方式打印该术语,可以将其复制并粘贴到控制台中。这就是所有双引号都被转义\"
的原因。使用~s
,表示&#34;视为字符串&#34;。
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