Jak uzyskać podciąg tekstu?


172

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

Odpowiedzi:



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

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


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"

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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.