Jak uzyskać podciąg tekstu?

172

Mam tekst o długości ~ 700. Jak zdobyć tylko ~ 30 jego pierwszych znaków?

Sam Witheker
źródło

Odpowiedzi:

243

Jeśli masz swój tekst w your_textzmiennej, możesz użyć:

your_text[0..29]
Matteo Alessani
źródło
18
lubyour_text[0...30]
Smutek
207

Użyj String#slicealiasu jako [].

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
Simone Carletti
źródło
31
Żeby było jasne, -1służy do dotarcia do końca łańcucha, więc a[1..-1] #=> "ello there".
Joshua Pinter
5
Może to być oczywiste dla niektórych, ale to nie w porządku, aby użyć przecinka pozycjach negatywnych: a[-4,-2]. Prawidłowy zapis jest tylko dwa punkty: a[-4..-2]. Nauczyłem się tego na własnej skórze.
cavpollo
24

Ponieważ oznaczyłeś go jako Railsy, ​​możesz użyć truncate:

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

Przykład:

 truncate(@text, :length => 17)

Fragment też jest miło wiedzieć, pozwala wyświetlić fragment tekstu Jak na przykład:

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

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

bezdechu
źródło
9
Ruby to nie Rails.
Joó Ádám
Tag @ JoóÁdám został zmieniony przez Andrew Marshalla
apneadiving
Czy było jakieś uzasadnienie dla zmiany? Jeśli OP działa w Railsach i prosi o rozwiązanie w Railsach, to pytanie powinno być oznaczone tagiem Rails. A wtedy twoja odpowiedź miałaby sens.
Joó Ádám
@ JoóÁdám pytanie zostało oznaczone Rails przez OP, o to chodzi
apneadiving
Rozumiem, nie rozumiem, dlaczego tag został usunięty. Zredagowałem pytanie i wyjaśniłem, że dotyczy ono Railsów. Oczekuje na sprawdzenie.
Joó Ádám
12

jeśli potrzebujesz go w szynach , możesz użyć go jako pierwszy ( kod źródłowy )

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

jest też ostatni ( kod źródłowy )

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

alternatywnie sprawdź od / do ( kod źródłowy ):

"hello".from(1).to(-2) # => "ell"
Aray Karjauv
źródło
NoMethodError: undefined method `first' for "abcde":String, to implementacja szyn?
Tiw
Tak to jest. ale możesz także skopiować kod źródłowy z linków, które zamieściłem
Aray Karjauv
0

Jeśli chcesz ciąg znaków, inne odpowiedzi są w porządku, ale jeśli szukasz pierwszych kilku liter jako znaków, możesz uzyskać do nich dostęp jako listę:

your_text.chars.take(30)
user12341234
źródło