Come posso ottenere il primo carattere di una stringa usando Ruby?
Alla fine quello che sto facendo è prendere il cognome di qualcuno e crearne solo un'iniziale.
Quindi, se la stringa era "Smith", voglio solo "S".
"Smith".chr #=> "S"
Come posso ottenere il primo carattere di una stringa usando Ruby?
Alla fine quello che sto facendo è prendere il cognome di qualcuno e crearne solo un'iniziale.
Quindi, se la stringa era "Smith", voglio solo "S".
"Smith".chr #=> "S"
Risposte:
Puoi usare le classi aperte di Ruby per rendere il tuo codice molto più leggibile. Ad esempio, questo:
class String
def initial
self[0,1]
end
end
ti permetterà di usare il initial
metodo su qualsiasi stringa. Quindi, se hai le seguenti variabili:
last_name = "Smith"
first_name = "John"
Quindi puoi ottenere le iniziali in modo molto chiaro e leggibile:
puts first_name.initial # prints J
puts last_name.initial # prints S
L'altro metodo menzionato qui non funziona su Ruby 1.8 (non che dovresti comunque usare 1.8! - ma quando questa risposta è stata pubblicata era ancora abbastanza comune):
puts 'Smith'[0] # prints 83
Ovviamente, se non lo fai regolarmente, definire il metodo potrebbe essere eccessivo e potresti farlo direttamente:
puts last_name[0,1]
Se utilizzi una versione recente di Ruby (1.9.0 o successiva), dovrebbe funzionare quanto segue:
'Smith'[0] # => 'S'
Se utilizzi 1.9.0+ o 1.8.7, dovrebbe funzionare quanto segue:
'Smith'.chars.first # => 'S'
Se utilizzi una versione precedente alla 1.8.7, dovrebbe funzionare:
'Smith'.split(//).first # => 'S'
Si noti che 'Smith'[0,1]
non non funziona su 1.8, vi non vi darà il primo carattere, che solo vi darà il primo byte di .
"Smith"[0]
restituirebbe il valore intero del carattere "S". Entrambe le versioni obbediscono "Smith"[0,1] == "S"
.
"Smith"[0,1]
funziona su 1.8 (assumendo ASCII). Non sono sicuro del motivo per cui presumi così tanto sul richiedente, così come su tutti gli altri che vorrebbero imparare da quella domanda. Ad esempio, Mac OS X viene fornito in bundle con Ruby 1.8, quindi non è richiesta alcuna installazione per questi utenti.
"Smith"[0..0]
funziona sia in Ruby 1.8 che in Ruby 1.9.
Per completezza, poiché Ruby 1.9 String # chr restituisce il primo carattere di una stringa. È ancora disponibile in 2.0 e 2.1.
"Smith".chr #=> "S"
In MRI 1.8.7 o superiore:
'foobarbaz'.each_char.first
Prova questo:
>> a = "Smith"
>> a[0]
=> "S"
O
>> "Smith".chr
#=> "S"
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
"Smith"[0]
restituirebbe il valore intero del carattere "S". Entrambe le versioni obbediscono "Smith"[0,1] == "S"
.
"Smith"[0] == ?S
è vero sia su Ruby 1.8 che su 1.9
A causa di una fastidiosa scelta di progettazione in Ruby prima della 1.9 - some_string[0]
restituisce il codice del carattere del primo carattere - il modo più portatile per scriverlo è some_string[0,1]
, che gli dice di ottenere una sottostringa all'indice 0 lunga 1 carattere.
Puoi anche usare truncate
> 'Smith'.truncate(1, omission: '')
#=> "S"
o per una formattazione aggiuntiva:
> 'Smith'.truncate(4)
#=> "S..."
> 'Smith'.truncate(2, omission: '.')
#=> "S."
Uno qualsiasi di questi metodi funzionerà:
name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S
.
dopo name
. E l'ultimo non ha senso anche se rimuovi il .
, perché utilizza due metodi diversi per fare la stessa cosa - [0]
e chr()
.
'Smith'.first