Można użyć coś takiego:
var_name.gsub!(/\s+/, '')
Albo, jeśli chcesz wrócić zmieniony ciąg, zamiast modyfikowania zmiennej
var_name.gsub(/\s+/, '')
ta pozwala także łańcuchowych z innymi metody (tj. something_else = var_name.gsub(...).to_i
, aby usunąć białe znaki, a następnie przekonwertować je na liczbę całkowitą). gsub!
dokona edycji w miejscu, więc musisz napisać var_name.gsub!(...); something_else = var_name.to_i
. Ściśle mówiąc, dopóki zostanie wprowadzona co najmniej jedna zmiana, gsub!
zwróci nową wersję (tzn. Powróci ta sama nazwa: gsub
), ale przy okazji, że otrzymujesz ciąg bez spacji, zwróci on nil
i wszystko się zepsuje. Z tego powodu wolałbym gsub
, jeśli używasz metod.
gsub
działa, zastępując wszelkie dopasowania pierwszego argumentu z drugim argumentem zawartości. W tym przypadku pasuje do dowolnej sekwencji kolejnych znaków białych znaków (lub tylko jednego) do regex /\s+/
, a następnie zastępuje je pustym łańcuchem. Istnieje również blokowa forma, jeśli chcesz wykonać pewne przetwarzanie na dopasowanej części, zamiast tylko zastępować bezpośrednio; zobacz String#gsub
, aby uzyskać więcej informacji na ten temat.
Dokumenty Ruby dla klasy Regexp
stanowią dobry punkt wyjścia do poznania wyrażenia regularnego - stwierdziłem, że są przydatne w wielu różnych sytuacjach, gdy kilka lub kilka milisekund tu i tam nie liczyć i nie trzeba dopasowywać rzeczy, które mogą być zagnieżdżane dowolnie głęboko.
Jak Gene sugerował w swoim komentarzu, można również użyć tr
:
var_name.tr(" \t\r\n", '')
To działa w podobny sposób, ale zamiast zastąpienia regex, zastępuje każdą instancję n th charakteru pierwszy argument w łańcuchu, do którego jest wywoływany, z postacią drugiego parametru lub, jeśli nie ma, bez niczego. Aby uzyskać więcej informacji, patrz String#tr
.
Chciałbym podkreślić, że jest to możliwe w końcu używa całkiem sporej ilości pamięci, jeśli masz bardzo długą listę liczb do usunięcia białych znaków, ponieważ najpierw trzeba zbudować tablicę każdego wystąpienia, które następnie łączy. Myślę, że jest też nieco wolniejszy, ponieważ iteruje dwa razy, choć nie wiem o tym. –