Есть ли лучший способ получить первые n байтов, а остальные строки? В настоящее время используется двоичный_часть и String.trim_leading - PullRequest
0 голосов
/ 04 ноября 2018

Дана строка 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"

Похоже, что был бы более чистый способ сделать это. Есть ли другой способ?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вот онелиновый раскол, просто из любопытства:

# make sure u-umlaut is combined diacritical
[lead, trail] =
  str
  |> to_charlist() 
  |> Enum.split(size)
  |> Tuple.to_list()
  |> Enum.map(&to_string/1)
#⇒ ["üabc", "123"]
0 голосов
/ 04 ноября 2018

Вы можете использовать двоичное сопоставление с образцом

<< a::binary-size(5), b::binary >> = "üabc123"
a == "üabc"
b == "123"
...