Làm thế nào để có được một chuỗi con của văn bản?


172

Tôi có văn bản với độ dài ~ 700. Làm thế nào để tôi chỉ nhận được ~ 30 ký tự đầu tiên?

Câu trả lời:



207

Sử dụng String#slice, cũng có bí danh là [].

a = "hello there"
a[1]                   #=> "e"
a[1,3]                 #=> "ell"
a[1..3]                #=> "ell"
a[6..-1]               #=> "there"
a[-3,2]                #=> "er"
a[-4..-2]              #=> "her"
a[12..-1]              #=> nil
a[-2..-4]              #=> ""
a[/[aeiou](.)\1/]      #=> "ell"
a[/[aeiou](.)\1/, 0]   #=> "ell"
a[/[aeiou](.)\1/, 1]   #=> "l"
a[/[aeiou](.)\1/, 2]   #=> nil
a["lo"]                #=> "lo"
a["bye"]               #=> nil

31
Để rõ ràng, -1được sử dụng để đi đến cuối chuỗi, vì vậy a[1..-1] #=> "ello there".
Joshua Pinter

5
Điều này có thể rõ ràng đối với một số người, nhưng không ổn khi sử dụng dấu phẩy cho các vị trí phủ định : a[-4,-2]. Ký hiệu hợp lệ duy nhất là hai dấu chấm : a[-4..-2]. Học nó một cách khó khăn.
cavpollo

24

Vì bạn đã gắn thẻ Rails, bạn có thể sử dụng cắt ngắn:

http://api.rubyonrails.org/groupes/ActionView/Helpers/TextHelper.html#method-i-truncate

Thí dụ:

 truncate(@text, :length => 17)

Trích dẫn cũng rất hay để biết, nó cho phép bạn hiển thị một đoạn trích của một văn bản Giống như vậy:

 excerpt('This is an example', 'an', :radius => 5)
 # => ...s is an exam...

http://api.rubyonrails.org/groupes/ActionView/Helpers/TextHelper.html#method-i-excerpt


9
Ruby không phải là Rails.
Joó Ádám

Thẻ @ JoóÁdám đã được thay đổi bởi Andrew Marshall
bắt đầu từ

Có bất kỳ biện minh cho sự thay đổi? Nếu OP hoạt động trong Rails và yêu cầu giải pháp trong Rails, thì câu hỏi sẽ được gắn thẻ với Rails. Và sau đó câu trả lời của bạn sẽ có ý nghĩa.
Joó Ádám

@ JoóÁdám câu hỏi đã được OP gắn thẻ Rails, đó là điểm chính
bắt đầu từ

Tôi hiểu rồi, tôi không hiểu tại sao thẻ bị xóa. Tôi đã chỉnh sửa câu hỏi và làm rõ về Rails. Nó đang chờ xem xét.
Joó Ádám

12

nếu bạn cần nó trong đường ray, bạn có thể sử dụng đầu tiên ( mã nguồn )

'1234567890'.first(5) # => "12345"

cuối cùng cũng có ( mã nguồn )

'1234567890'.last(2) # => "90"

cách khác kiểm tra từ / đến ( mã nguồn ):

"hello".from(1).to(-2) # => "ell"

NoMethodError: undefined method `first' for "abcde":String, đó là một triển khai đường ray?
Tiw

Vâng, đúng vậy. nhưng bạn cũng có thể sao chép các liên kết mẫu mã nguồn mà tôi đã đăng
Aray Karjauv

0

Nếu bạn muốn một chuỗi, thì các câu trả lời khác đều ổn, nhưng nếu những gì bạn đang tìm kiếm là một vài chữ cái đầu tiên dưới dạng ký tự, bạn có thể truy cập chúng dưới dạng danh sách:

your_text.chars.take(30)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.