2013-04-09 69 views
10

Tôi có một chuỗi mà tôi đang sử dụng .split ('') để tách chuỗi thành một mảng từ. Tôi có thể sử dụng một phương pháp tương tự để tách chuỗi thành một mảng gồm 2 từ thay thế không?Làm cách nào để tách chuỗi thành nhiều mảng?

Trả về một mảng mà mỗi phần tử là một từ:

words = string.split(' ') 

Tôi đang tìm để trả lại một mảng mà mỗi phần tử là 2 từ để thay thế.

+0

Làm thế nào để bạn muốn để điều trị một số lẻ Số từ? Thả từ cuối cùng? Thả từ đầu tiên? Giữ nó? –

+0

bản sao có thể có của [Cần chia mảng thành mảng phụ có kích thước được chỉ định trong Ruby] (http://stackoverflow.com/questions/3864139/need-to-split-arrays-to-sub-arrays-of-specified-size -in-ruby) –

+1

Markthomas thậm chí bạn đã đọc câu hỏi –

Trả lời

7
str = 'one two three four five six seven' 
str.split.each_slice(2).map{|a|a.join ' '} 
=> ["one two", "three four", "five six", "seven"] 

này cũng xử lý trường hợp của một số lẻ của từ.

+0

Tôi đang cố gắng tìm hiểu làm thế nào tôi có thể làm giảm điều này để một cái gì đó như 'str.split.each_slice (2) .map (&: join)' nhưng tôi không thể có được '''' đối số trên 'tham gia' . –

+0

Joe: Sẽ tốt hơn nếu bạn mở một câu hỏi riêng. Gợi ý: không &: nhưng thay vào đó là nội tuyến {| t | t.join ('')} –

+1

Cảm ơn bạn đã bình luận @SimonB. nhưng nhận xét chủ yếu là bình luận của chính tôi về bản thân mình về câu trả lời của riêng tôi. Câu trả lời phản ánh gợi ý của bạn rồi, tôi đã cố gắng làm cho điều này trở nên khó hiểu hơn. –

3

Something như thế này nên làm việc:

string.scan(/\w+ \w+/) 
+0

'str = 'one1! hai2 @ ba3 # bốn4 $ năm5% sáu6^''kết quả đầu ra' [] '. Tôi không biết nếu các từ có tất cả các chữ cái –

+1

có thể 'string.scan (/ \ S + \ S + /)' sẽ tốt hơn. – oldergod

+0

Nó cũng chưa được trả lời làm thế nào để tread một số lẻ của các từ. Tôi không biết. –

4

Bạn có thể làm

string= 'one1! [email protected] three3# four4$ five5% six6^ sev' 
string.scan(/\S+ ?\S*/) 
# => ["one1! [email protected]", "three3# four4$", "five5% six6^", "sev"] 
+0

Không nếu từ cuối cùng là một ký tự đơn. –

+0

@JoeFrambach cảm ơn bạn đã sửa. – oldergod

+1

là bạn thay thế '?' Bằng '\ s *', sau đó nó cũng sẽ bảo toàn khoảng trống ban đầu giữa các từ. –

2

Ruby scan rất hữu ích cho việc này:

'a b c'.scan(/\w+(?:\s+\w+)?/) 
=> ["a b", "c"] 

'a b c d e f g'.scan(/\w+(?:\s+\w+)?/) 
=> ["a b", "c d", "e f", "g"] 
2

Đây là tất cả những gì phải làm:

def first_word 
    chat = "I love Ruby" 
    chat = chat.split(" ") 
    chat[0] 
end 
Các vấn đề liên quan