当附加带字符串的双引号时,我遇到erlang追加/“不”的问题?
Id = "1223",
Flag = "1",
lists:flatten(io_lib:format("{xmlelement, \"deliverystatus\", [{\"messageid\", \"~s\"}, {\"status\", \"~s\"}], []}", [Id, Flag])).
答案 0 :(得分: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已选择将其显示为字符串。但它试图不隐藏任何信息,所以你有周围的“charaters告诉你它是一个字符串,并在任何特殊字符之前给你打电话,在这种情况下,以下”是字符串的一部分而不是这个字符串的分隔符。但内部只存储了字符“。您可以通过检查字符串的长度来验证它:
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
并且为了获得更好的结果,为了将字符串与ok分离,这是io:format的返回值,因此在控制台中显示,让我们添加一个回车符:
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:格式或长度,您可以验证
返回的字符串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])),