Có vấn đề gì với điều này?
String.strip
chỉ hỗ trợ xóa một ký tự. Đó là lỗi được ném như Elixir cố gắng để chuyển đổi "\r\n"
để một nhân vật duy nhất (source):
iex(1)> s = "\r\n"
"\r\n"
iex(2)> <<s::utf8>>
** (ArgumentError) argument error
Hơn nữa, String.strip
đã phản đối ủng hộ String.trim
, mà không hỗ trợ một chuỗi như là đối số thứ hai, nhưng chức năng đó sẽ chỉ loại bỏ các trình tự chính xác \r\n
từ thời gian bắt đầu và kết thúc của chuỗi:
iex(1)> aaa = """
...(1)> fdsfds fdsfds
...(1)> fdsfdsfds
...(1)> fdsfdsfds
...(1)> """
"fdsfds fdsfds\n fdsfdsfds\nfdsfdsfds\n"
iex(2)> String.trim(aaa, "\r\n")
"fdsfds fdsfds\n fdsfdsfds\nfdsfdsfds\n"
iex(3)> String.trim(aaa, "\r\n") == aaa
true
mà tôi nghi ngờ là những gì bạn muốn như bạn nói: "tôi muốn để loại bỏ tất cả các biểu tượng của một dòng sản phẩm mới". Để loại bỏ tất cả \r
và \n
, bạn có thể sử dụng String.replace
hai lần:
iex(4)> aaa |> String.replace("\r", "") |> String.replace("\n", "")
"fdsfds fdsfds fdsfdsfdsfdsfdsfds"
'aaa |> string.Replace (~ r/\ r | \ n/"") '? – mudasobwa
@mudasobwa Cá nhân tôi sẽ không sử dụng Regex cho những trường hợp đơn giản như vậy, nhưng đó chắc chắn là một giải pháp hợp lệ! Tôi cũng nghĩ rằng trong trường hợp này giải pháp thay thế 2 String của tôi sẽ nhanh hơn Regex của bạn mặc dù tôi đã không đo nó. – Dogbert