-1

在用字符串附加双引号时,我遇到了 erlang 附加 /" not " 的问题?

Id = "1223",
    Flag = "1", 

lists:flatten(io_lib:format("{xmlelement, \"deliverystatus\", [{\"messageid\", \"~s\"}, {\"status\", \"~s\"}], []}", [Id, Flag])).
4

1 回答 1

2

您的问题不是很清楚,但我尝试了您作为示例提供的代码,我猜您很生气,因为结果字符串显示为\"序列而不是单个字符"

1> Id = "1223".
"1223"
2> Flag = "1".
"1"
3> lists:flatten(io_lib:format("{xmlelement, \"deliverystatus\", [{\"messageid\", \"~s\"}, {\"status\", \"~s\"}], []}", [Id, Flag])).
"{xmlelement, \"deliverystatus\", [{\"messageid\", \"1223\"}, {\"status\", \"1\"}], []}"

事实上,您必须记住,您在控制台中获得的是上次评估结果的图像。在您的情况下,它是一个列表,仅包含可打印字符,因此 shell 选择将其显示为字符串。但它尽量不隐藏任何信息,所以你有周围的 " 字符告诉你它是一个字符串,并且在任何特殊字符之前的 \ 告诉你,在这种情况下,以下 " 是字符串的一部分而不是此字符串的分隔符。但内部只存储字符“。您可以通过检查字符串的长度来验证它:

5> length(lists:flatten(io_lib:format("{xmlelement, \"deliverystatus\", [{\"messageid\", \"~s\"}, {\"status\", \"~s\"}], []}", [Id, Flag]))).   
76
6>

或者为了更简单的测试:o)

6> length("test\"").
5
7> lists:flatten("test\"").
"test\""
8>

如果要显示没有这些 \ 的字符串,请使用 io:format 函数在控制台中显示字符串:

4> io:format(lists:flatten(io_lib:format("{xmlelement, \"deliverystatus\", [{\"messageid\", \"~s\"}, {\"status\", \"~s\"}], []}", [Id, Flag]))).
{xmlelement, "deliverystatus", [{"messageid", "1223"}, {"status", "1"}], []}ok

最后为了获得更好的结果,为了将字符串与 io:format 的返回值 ok 分开,并显示在控制台中,让我们添加一个回车:

8> io:format(lists:flatten(io_lib:format("{xmlelement, \"deliverystatus\", [{\"messageid\", \"~s\"}, {\"status\", \"~s\"}], []}", [Id, Flag])) ++ "~n").
{xmlelement, "deliverystatus", [{"messageid", "1223"}, {"status", "1"}], []}
ok
9>

编辑: io:format 的返回值总是可以的,它只是在控制台上打印并返回 ok。我说的是,使用 io:format 或 length 您可以验证由

lists:flatten(io_lib:format("{xmlelement, \"deliverystatus\", [{\"messageid\", \"~s\"}, {\"status\", \"~s\"}], []}", [Id, Flag])),

不包含任何“\”。如果您想记录此值以供以后使用或操作它,只需将其分配给一个变量:

My_string = lists:flatten(io_lib:format("{xmlelement, \"deliverystatus\", [{\"messageid\", \"~s\"}, {\"status\", \"~s\"}], []}", [Id, Flag])),
于 2013-03-21T12:21:41.537 回答