在Erlang中,当您有可打印字符列表时,它是一个字符串,但字符串也是一列项目,列表的所有函数都可以应用到字符串上。理想情况下,erlang中不存在数据结构:字符串。
我的代码的一部分需要确定的东西不仅是一个列表,但它的一个字符串。 (一个真正的字符串)。它需要分开列表,例如[1,2,3,a,b,"josh"]
,来自字符串例如"Muzaaya"
。对于字符串和列表,警卫表达式is_list/1
将会说true
。没有像
这样的警卫,所以这意味着我需要一个代码片段来确保我的数据是一个字符串。在这种情况下的字符串是仅可打印的列表(按字母顺序,两种情况,上和下),并且可以包含数字,例如is_string/1
"Muzaaya2536 618 Joshua"
。我需要一个代码片段(Erlang)来检查我并确保变量是一个字符串,而不仅仅是一个列表。感谢从Erlang列表中区分字符串
回答
你有模块io_lib
两个功能,这可以帮助:io_lib:printable_list/1
和io_lib:printable_unicode_list/1
其测试,如果参数分别为字符打印LATIN1或统一的列表。
谢谢@rvirding,这是一个更加标准的解决方案! –
使用的可打印字符的isprint判断(3)定义 -
isprint(X) when X >= 32, X < 127 -> true;
isprint(_) -> false.
is_string(List) when is_list(List) -> lists:all(fun isprint/1, List);
is_string(_) -> false.
你将不能够使用它作为一个后卫,虽然。
谢谢@ butter71,这个工作也很好! –
这适用于Latin1字符集,但注意它会拒绝Unicode字符代码可能很重要。 – goncalotomas
- 1. 查找列表中的字符串 - Erlang
- 2. 将字符串附加到Erlang中的字符串列表
- 3. Erlang如何从列表中获取字符串
- 4. 从列表中分配字符串
- 5. 列表和区分INT和字符串值的字符串值
- 6. 在Erlang中检测字符列表作为字符串
- 7. Erlang中的字符串分隔
- 8. 将字符串列表拆分为字符串列表列表
- 9. 从字符串列表到字符串中的接口列表
- 10. 分割字符串,并从列表
- 11. 二进制列表到字符串列表 - Erlang
- 12. Thrift/Erlang字符串
- 13. 从字符串部分列
- 14. 划分字符串列表
- 15. 分离字符串列表
- 16. 字符串转换列表分为地图[字符串,列表]
- 17. 从字符串列表中删除字符串的一部分,其中在本身的部分是字符串
- 18. C#:字符串拆分返回字符串列表和分隔符列表?
- 19. 在Go中的字符串列表中拆分字符串
- 20. 将列表转换并格式化为erlang中的字符串
- 21. 将字符串转换为Erlang中的整数列表
- 22. 确定项目是Erlang中的字符串还是列表
- 23. Erlang:在列表中搜索匹配的字符串
- 24. 区分字符串中使用字符串分割
- 25. 列表中分隔的字符串
- 26. 在列表中拆分字符串
- 27. 拆分OCaml中的字符串列表
- 28. 在Python列表中分离字符串
- 29. Python:在列表中分割字符串
- 30. 从字符串列表
参见http://stackoverflow.com/questions/2479713/determining-if-an-item-is-a-string-or-a-list-in-erlang – legoscia