Erlang将双引号附加到字符串

时间:2013-03-21 11:18:49

标签: erlang

当附加带字符串的双引号时,我遇到erlang追加/“不”的问题?

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

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

1 个答案:

答案 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])),