2011-08-18 11 views

Trả lời

140

séc ra Rails squish phương pháp:

http://apidock.com/rails/String/squish

+6

Đơn giản nhất và giải pháp thanh lịch nhất. Cảm ơn. Nhưng có một điều, phương pháp này được định nghĩa trong Rails, vì vậy nó sẽ chỉ hoạt động trong các ứng dụng Rails, may mắn là trường hợp của tôi. – Kreeki

+5

cool one :) không bao giờ nghe nói về nó – fl00r

+2

Như Kreeki nói một cách không rõ ràng, đây là một phương pháp Rails, không phải là một phương pháp Ruby. –

16

Cách đơn giản nhất có lẽ sẽ là

s = "Hello, my\n  name is Michael." 
s.split.join(' ') #=> "Hello, my name is Michael." 
+0

Ồ, đó là khó khăn, nhưng nó hoạt động như một sự quyến rũ. – Kreeki

3

Sử dụng String#gsub:

s = "Hello, my\n  name is Michael." 
s.gsub(/\s+/, " ") 
+0

đầu ra sẽ không chính xác trong trường hợp của '" Xin chào, \ nTên của tôi là Michael "'. Lý tưởng nhất là bạn sẽ muốn một không gian nơi có một '\ n' – Ali

+0

Bạn nói đúng, tôi đã sửa nó. – Nikola

4

regex này sẽ thay thế thể hiện của 1 hoặc nhiều không gian màu trắng với 1 khoảng trắng, ps \s sẽ thay thế tất cả các ký tự khoảng trắng bao gồm \s\t\r\n\f:

a_string.gsub!(/\s+/, ' ') 

Tương tự như vậy cho chỉ vận chuyển trở lại

str.gsub!(/\n/, " ") 

Đầu tiên thay thế tất cả \n với không gian màu trắng, sau đó sử dụng loại bỏ nhiều regex khoảng trắng.

+0

Cảm ơn! Điều này làm việc cho mục đích của tôi để loại bỏ không gian bội số nhưng duy trì không gian duy nhất giữa các từ. –

4
my_string = "Hello, my\n  name is Michael." 
my_string = my_string.gsub(/\s+/, " ") 
+0

anh ta cũng muốn xóa '\ n' lý tưởng (tôi cảm thấy) nó nên được thay thế bằng một khoảng trống trong trường hợp giống như' "Xin chào, \ nTên của tôi là Michael" ' – Ali

+0

@Ali, đúng là – fl00r

32

Để minh họa Rubys xây dựng trong bóp:

string.gsub("\n", ' ').squeeze(' ') 
+2

Chỉ cần lưu ý: squeeze sẽ nén TẤT CẢ các chuỗi có nhiều ký tự. Vì vậy, "Bóp bản sao của ứng dụng của tôi" .squeeze => "Squeze bản sao của tôi aplication" – charliepark

+7

Nhưng 'squeeze ('')' chỉ bóp không gian. '" Bóp bản sao của ứng dụng của tôi ".squeeze ('') =>" Bóp bản sao của ứng dụng của tôi ". – steenslag

+0

Ah. Điểm tốt! – charliepark

3

Hãy thử này:

s = "Hello, my\n  name is Michael." 
s.gsub(/\n\s+/, " ") 
+0

Thanh lịch, cảm ơn bạn! – Vlad

+0

Đây thực sự là câu trả lời "đồng bằng ruby" tốt nhất và hoạt động đúng cách để tước không gian hàng đầu từ một chuỗi nhiều dòng. –

0
Use squish 
currency = " XCD" 
str = currency.squish 
str = "XCD" #=> "XCD" 
Các vấn đề liên quan