จะรับซับสตริงข้อความได้อย่างไร?


คำตอบ:



207

ใช้ยังเป็นนามแฝงString#slice[]

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
ต้องมีความชัดเจนจะใช้ในการได้รับการสิ้นสุดของสตริงดังนั้น-1 a[1..-1] #=> "ello there"
Joshua Pinter

5
นี้อาจจะเป็นที่ชัดเจนที่จะบาง แต่มันก็ไม่ได้a[-4,-2]ถูกใช้เครื่องหมายจุลภาคสำหรับตำแหน่งเชิงลบ: เครื่องหมายที่ถูกต้องเพียงอย่างเดียวคือจุดสองจุด: a[-4..-2]. เรียนรู้วิธีที่ยาก
cavpollo

24

เมื่อคุณติดแท็กกับ Rails คุณสามารถใช้ truncate:

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

ตัวอย่าง:

 truncate(@text, :length => 17)

ส่วนที่ตัดตอนมาก็รู้ดีเช่นกันมันช่วยให้คุณแสดงข้อความที่ตัดตอนมาเช่น:

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

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


9
Ruby ไม่ใช่ Rails
JoóÁdám

@ JoóÁdámเปลี่ยนแท็กโดย Andrew Marshall
apneadiving

มีเหตุผลสำหรับการเปลี่ยนแปลงหรือไม่? หาก OP ทำงานใน Rails และถามหาวิธีแก้ปัญหาใน Rails คำถามนั้นควรติดแท็กด้วย Rails แล้วคำตอบของคุณก็สมเหตุสมผลแล้ว
JoóÁdám

@ JoóÁdámคำถามถูกติดแท็ก Rails โดย OP นั่นเป็นประเด็น
apneadiving

ฉันเข้าใจแล้วฉันไม่เห็นว่าทำไมลบแท็กออก ฉันได้แก้ไขคำถามและทำให้ชัดเจนเกี่ยวกับ Rails อยู่ระหว่างการตรวจสอบ
JoóÁdám

12

ถ้าคุณต้องการในรางคุณสามารถใช้ครั้งแรก ( ซอร์สโค้ด )

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

นอกจากนี้ยังมีล่าสุด ( ซอร์สโค้ด )

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

หรือตรวจสอบจาก / ถึง ( ซอร์สโค้ด ):

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

NoMethodError: undefined method `first' for "abcde":Stringมันคือการดำเนินการทางรถไฟ?
Tiw

ใช่แล้ว. แต่คุณยังสามารถคัดลอกลิงก์ของซอร์สโค้ดแบบที่ฉันโพสต์ได้
Aray Karjauv

0

หากคุณต้องการสตริงคำตอบอื่น ๆ ก็ใช้ได้ แต่ถ้าสิ่งที่คุณกำลังค้นหาคือตัวอักษรสองสามตัวแรกเป็นอักขระที่คุณสามารถเข้าถึงได้เป็นรายการ:

your_text.chars.take(30)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.