Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 有没有更好的方法来获取前n个字节和字符串的其余部分?当前使用二进制\u部分和String.trim\u前导_Elixir - Fatal编程技术网

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处理的是某种数据源,它为给定字符串指定了一个以“是”表示的偏移量。至少我希望是这样。