Эликсир регулярных выражений заменяет квадратные скобки и запятую

В этом случае вам необходимо аннотировать отношения с @JsonManagedReference и @JsonBackReference следующим образом:

 @ManyToOne
 @JoinColumn(name = "company_id", referencedColumnName = "id")
 @JsonBackReference
 private Company company 

И

 @OneToMany(mappedBy="company")
 @JsonManagedReference
 private Set employee = new HashSet();

Здесь есть хороший пример

1
задан Adam Millerchip 6 March 2019 в 13:54
поделиться

5 ответов

Хотя @fhdhsni дал вам отличный ответ, если вы беспокоитесь о читабельности, я бы предложил абстрагировать все это в отдельную функцию, например так:

defmodule T do 
    def parsefloats(stringtobeparsed) do
        stringtobeparsed
        |> String.replace("[", "")
        |> String.replace(",", "")
        |> String.replace("]", "")
        |> String.split(" ")
        |> Enum.map(fn x -> String.to_float(x) end)
    end
end   

Затем вы называете это так: [113 ]

[x,y] = T.parsefloats("[40.45694301152436, -3.6907402812214514]")
# [40.45694301152436, -3.6907402812214514]
iex(3)> x
# 40.45694301152436
iex(4)> y
# -3.6907402812214514

Не лучше с точки зрения более компактного кода, но, я думаю, более читабельного.

0
ответ дан Onorio Catenacci 6 March 2019 в 13:54
поделиться

Я думаю, что комментарий на ваш вопрос об использовании парсера JSON лучше всего, за которым следует простой ответ fhdhsni. Но вот метод, который извлекает числа, а не заменяет скобки:

str = "[40.45694301152436, -3.6907402812214514]"
regex = ~r/([\d\.-]+), ([\d\.+-]+)/
Regex.run(regex, str, capture: :all_but_first) |> Enum.map(&String.to_float/1)

Вывод:

[40.45694301152436, -3.6907402812214514]
0
ответ дан Adam Millerchip 6 March 2019 в 13:54
поделиться

Помимо решений по замене строк, вы также можете взглянуть на Code.eval_string .

Таким образом, строка будет проанализирована, и вы получите список, который вы ищете;

{list, _} = Code.eval_string "[40.45694301152436, -3.6907402812214514]"
# {[40.45694301152436, -3.6907402812214514], []}
0
ответ дан Máté 6 March 2019 в 13:54
поделиться

Вот еще один вариант, используя String.slice:

"[40.45694301152436, -3.6907402812214514]" 
|> String.slice(1..-2) 
|> String.split(~r/,\s+/) 
|> Enum.map(&String.to_float/1)

Приветствия!

0
ответ дан Tim Lowrimore 6 March 2019 в 13:54
поделиться

Вместо строки вы можете передать регулярное выражение в String.replace. В Elixir вы можете построить регулярное выражение с ~r сигилом .

"[40.45694301152436, -3.6907402812214514]"
|> String.replace(~r'[\[\],]', "")
|> String.split()
|> Enum.map(&String.to_float/1)
0
ответ дан fhdhsni 6 March 2019 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: