二进制字符串erlang的第一个字

Posted

技术标签:

【中文标题】二进制字符串erlang的第一个字【英文标题】:First word of binary string erlang 【发布时间】:2015-08-22 09:46:50 【问题描述】:

我需要做这样的事情 >,它应该返回 。我如何在没有拆分功能的情况下做到这一点,只能通过模式匹配和选择/如果使用 Erlang 的情况。谢谢。

【问题讨论】:

你的查找规则是什么? @user2513522,从这里获取答案的基础:***.com/questions/428124/… 【参考方案1】:

虽然Attic的approach是正确的,但有一个简单的解决方案(包括修剪前导空格):

first_word_bin(Bin) ->
    first_word_bin(ltrim(Bin), <<>>).

first_word_bin(<<>>, Acc) -> Acc;
first_word_bin(<<$\s, _/binary>>, Acc) -> Acc;
first_word_bin(<<X, Bin/binary>>, Acc) ->
    first_word_bin(Bin, <<Acc/binary, X>>).

ltrim(<<$\s, Bin/binary>>) -> ltrim(Bin);
ltrim(Bin) -> Bin.

【讨论】:

是的,这好多了【参考方案2】:

不知道你为什么不想使用 binary:split。这是实现此目的的一个方法,但我不太喜欢它。

first_word_bin(Bin) ->
    Len = length_till_space(Bin, 0),
    <<Bin:Len/binary>>.

length_till_space(<<>>, Num) -> Num;
length_till_space(<<$\s, _/binary>>, Num) -> Num;
length_till_space(<<_:1/binary, Tl/binary>>, Num) ->
    length_till_space(Tl, Num + 1).

但是,如果二进制文件开头有空格,例如

>

那么结果将是>,如果没有开头的空格,它将是>。这可以通过预先修剪起始空白来解决,但您可以使用相同的方法。

所以我们使用 length_till_space 来获取字符的数量,直到它碰到一个空格。第一种情况检查二进制是否为空,第二种情况检查二进制的头部是否为 $\s(空格),最后一种情况只是进行尾调用并增加数字。

最后我们从二进制文件中获取前 X 个字符并将其返回。

【讨论】:

以上是关于二进制字符串erlang的第一个字的主要内容,如果未能解决你的问题,请参考以下文章

检查 unicode 值是不是在 Erlang 二进制字符串中?

Erlang - 如何将 \u0000 字符转换为二进制?

如何在 Erlang 中找到 utf8 编码二进制文件的字符长度?

couchdb 气垫船限制,将任意 erlang 术语存储到 Couchdb

Python对一行按照字节位置读取想要的字符,文件有多行,如何循环运行

什么时候使用字节流什么时候使用字符流?