2016-10-25 18 views

Trả lời

8

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\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" 
+1

'aaa |> string.Replace (~ r/\ r | \ n/"") '? – mudasobwa

+0

@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

Các vấn đề liên quan