Elixir 有没有更好的方法来获取前n个字节和字符串的其余部分?当前使用二进制\u部分和String.trim\u前导
给定一个字符串Elixir 有没有更好的方法来获取前n个字节和字符串的其余部分?当前使用二进制\u部分和String.trim\u前导,elixir,Elixir,给定一个字符串str=“üabc123”,并且size=5。我想获取前5个字节(“üabc”),以及字符串的其余部分(“123”) 目前我正在做: str = "üabc123" size = 5 a = binary_part(str, 0, size) # "üabc" b = String.trim_leading(str, a) # "123" 似乎有一个更干净的方法可以做到这一点。还有其他方法吗?您可以使用二进制模式匹配 << a::binary-size
str=“üabc123”
,并且size=5
。我想获取前5个字节(“üabc”
),以及字符串的其余部分(“123”
)
目前我正在做:
str = "üabc123"
size = 5
a = binary_part(str, 0, size) # "üabc"
b = String.trim_leading(str, a) # "123"
似乎有一个更干净的方法可以做到这一点。还有其他方法吗?您可以使用二进制模式匹配
<< a::binary-size(5), b::binary >> = "üabc123"
a == "üabc"
b == "123"
=“uABC123”
a==“u abc”
b==“123”
出于好奇,这里有一个单线拆分:
#确保u-umlaut组合为变音键
[线索,线索]=
str
|>to_charlist()
|>枚举拆分(大小)
|>Tuple.to_list()
|>枚举映射(&to_字符串/1)
#⇒[“美国广播公司”,“123”]
为什么要以字节而不是字符计数?如果您的输入是üü12
,那么您只会得到第三个ü
的一半,这不是一个有效的字符串。@AdamMillerchip更糟糕的是,如果“ủ”
以组合形式存在(string.normalize(:ufc)
),结果会有所不同。也就是说,这取决于它们是如何产生的:用德语键盘键入“ủ”,或者键入组合变音。啊,谢谢。我正在尝试
,但是得到了a的一个数字,我不知道二进制大小
。谢谢不幸的是,这个答案似乎并不正确;如果我将它复制粘贴到我的iex
中,它会生成您所显示的结果,而这是一个组合的u-umlaut,-try(to_charlist(“u abc123”)
),它实际上只有1个字节。看起来Elixir和/或Erlang在这里对二进制文件有点不好。@AlekseiMatiushkin这是代码点,不是字节。试试:binary.bin\u to\u list()
。我猜OP处理的是某种数据源,它为给定字符串指定了一个以“是”表示的偏移量。至少我希望是这样。