Ruby String

En Ruby, les objets String sont utilisés pour stocker ou manipuler des séquences d'un ou plusieurs octets.

Les chaînes Ruby se divisent en chaînes entre guillemets simples (') et chaînes entre guillemets doubles ("). La différence est que les chaînes entre guillemets doubles prennent en charge davantage de caractères d'échappement.

Chaînes entre guillemets simples

Les chaînes les plus simples sont les chaînes entre guillemets simples, c'est-à-dire les chaînes entourées de guillemets simples :

'Ceci est une chaîne dans un programme Ruby'

Si vous devez utiliser un caractère de guillemet simple à l'intérieur d'une chaîne entre guillemets simples, vous devez utiliser une barre oblique inversée (\) dans la chaîne entre guillemets simples, afin que l'interpréteur Ruby ne traite pas ce caractère de guillemet simple comme le terminateur de la chaîne :

'Ne veux\'tu pas lire le livre d'O\'Reilly\'?'

Une barre oblique inversée peut également échapper une autre barre oblique inversée, de sorte que la deuxième barre oblique inversée ne soit pas interprétée comme un caractère d'échappement.

Voici les fonctionnalités liées aux chaînes de caractères en Ruby.

Chaînes entre guillemets doubles

Dans les chaînes entre guillemets doubles, nous pouvons utiliser#{}le signe dièse et les accolades pour évaluer des expressions :

Insertion de variables dans les chaînes :

Exemples

#!/usr/bin/ruby # -*- coding: UTF-8 -*- name1 = "Joe" name2 = "Mary" puts "Bonjour #{name1}, où est #{name2} ?"

Essayez-le »

L'exemple ci-dessus produit le résultat suivant :

你好 Joe,  Mary 在哪?

Effectuer des opérations mathématiques dans les chaînes :

Exemples

#!/usr/bin/ruby # -*- coding: UTF-8 -*- x, y, z = 12, 36, 72 puts "La valeur de x est #{ x }" puts "La valeur de x + y est #{ x + y }" puts "La moyenne de x + y + z est #{ (x + y + z)/3 }"

Essayez-le »

L'exemple ci-dessus produit le résultat suivant :

x 的值为 12
x + y 的值为 48
x + y + z 的平均值为 40

Ruby prend également en charge les littéraux de chaîne introduits par %q et %Q. %q utilise les règles de citation des guillemets simples, tandis que %Q utilise les règles de citation des guillemets doubles, suivis d'un délimiteur de début tel que ( ! [ { etc., et d'un délimiteur de fin correspondant tel que } ] ).

Le caractère suivant q ou Q est le délimiteur. Le délimiteur peut être n'importe quel caractère non alphanumérique d'un octet, tel que [, {, (, <, !, etc. La chaîne est lue jusqu'à ce qu'un délimiteur de fermeture correspondant soit trouvé.

Exemples

#!/usr/bin/ruby # -*- coding: UTF-8 -*- desc1 = %Q{Les chaînes Ruby peuvent utiliser '' et "".} desc2 = %q|Les chaînes Ruby peuvent utiliser '' et "".| puts desc1 puts desc2

Essayez-le »

L'exemple ci-dessus produit le résultat suivant :

Ruby 的字符串可以使用 '' 和 ""。
Ruby 的字符串可以使用 '' 和 ""。

Caractères d'échappement

Le tableau ci-dessous répertorie les caractères d'échappement ou les caractères non imprimables qui peuvent être échappés à l'aide de la notation avec barre oblique inverse.

Remarque :À l'intérieur d'une chaîne entre guillemets doubles, les caractères d'échappement sont interprétés. À l'intérieur d'une chaîne entre guillemets simples, les caractères d'échappement ne sont pas interprétés et sont reproduits tels quels.

Notation avec barre oblique inverseCaractère hexadécimalDescription
\a0x07Alerte (cloche)
\b0x08Retour arrière
\cx Contrôle-x
\C-x Contrôle-x
\e0x1bÉchap
\f0x0cSaut de page
\M-\C-x Méta-Contrôle-x
\n0x0aNouvelle ligne
\nnn Représentation octale, où n va de 0 à 7
\r0x0dRetour chariot
\s0x20Espace
\t0x09Onglet
\v0x0bTabulation verticale
\x Caractère x
\xnn Représentation hexadécimale, où n va de 0 à 9, a-f, ou A-F

Encodage des caractères

Le jeu de caractères par défaut de Ruby est ASCII, où les caractères peuvent être représentés par un seul octet. Si vous utilisez UTF-8 ou un autre jeu de caractères moderne, les caractères peuvent être représentés par un à quatre octets.

Vous pouvez utiliser $KCODE au début du programme pour changer le jeu de caractères, comme indiqué ci-dessous :

$KCODE = 'u'

Voici les valeurs possibles de $KCODE.

EncodageDescription
aASCII (identique à none). C'est la valeur par défaut.
eEUC.
nNone (identique à ASCII).
uUTF-8.

Méthodes de chaîne intégrées

Nous avons besoin d'une instance de l'objet String pour appeler des méthodes String. Voici comment créer une instance d'un objet String :

new [String.new(str="")]

Cela renverra un nouvel objet chaîne contenant une copie destr. Maintenant, en utilisant l'objetstr, nous pouvons appeler n'importe quelle méthode d'instance disponible. Par exemple :

Exemples

#!/usr/bin/ruby myStr = String.new("THIS IS TEST") foo = myStr.downcase puts "#{foo}"

Cela produira le résultat suivant :

this is test

Voici les méthodes de chaîne publiques (en supposant que str est un objet String) :

Non.Metode & Deskripsi
1str % arg
Formate une chaîne à l'aide d'une spécification de format. Si arg contient plus d'une substitution, alors arg doit être un tableau. Pour plus d'informations sur les spécifications de format, voir sprintf dans le module Kernel.
2str * integer
Renvoie une nouvelle chaîne contenant integer copies de str. En d'autres termes, str est répété integer fois.
3str + other_str
Concatène other_str à str.
4str << obj
Concatène un objet à la chaîne. Si l'objet est un Fixnum avec une valeur comprise entre 0 et 255, il est converti en caractère. Comparez ceci avec concat.
5str <=> other_str
Compare str avec other_str, renvoyant -1 (inférieur à), 0 (égal à) ou 1 (supérieur à). La comparaison est sensible à la casse.
6str == obj
Vérifie l'égalité de str et obj. Si obj n'est pas une chaîne, renvoie false ; si str <=> obj renvoie 0, renvoie true.
7str =~ obj
Fait correspondre str au motif d'expression régulière obj. Renvoie la position où la correspondance commence, sinon renvoie false.
8str[position] # Remarque : renvoie le code ASCII plutôt qu’un caractère
str[start, length]
str[start..end]
str[start...end]

Extrait une sous-chaîne à l’aide d’un index.
9str.capitalize
Convertit la première lettre d’une chaîne en majuscule et le reste en minuscules pour l’affichage.
10str.capitalize!
Identique à capitalize, mais capitalize! renvoie nil si aucune modification n’est effectuée.
11str.casecmp
Comparaison de chaînes insensible à la casse.
12str.center
Centre la chaîne de caractères.
13str.chomp
Supprime le séparateur d'enregistrement ($/) à la fin de la chaîne, généralement \n. S'il n'y a pas de séparateur d'enregistrement, cela ne fait rien.
14str.chomp!
Identique à chomp, mais str est modifiée et renvoyée.
15str.chop
Supprime le dernier caractère de str.
16str.chop!
Identique à chop, mais str est modifiée et renvoyée.
17str.concat(other_str)
Concatène other_str à str.
18str.count(str, ...)
Compte un ou plusieurs ensembles de caractères. S'il y a plusieurs ensembles de caractères, compte l'intersection de ces ensembles.
19str.crypt(other_str)
Applique un hachage cryptographique à sens unique à str. L'argument est une chaîne de deux caractères, chaque caractère étant dans la plage a-z, A-Z, 0-9, ., ou /.
20str.delete(other_str, ...)
Renvoie une copie de str dans laquelle tous les caractères de l'intersection des arguments sont supprimés.
21str.delete!(other_str, ...)
Identique à delete, mais str est modifié et renvoyé.
22str.downcase
Renvoie une copie de str avec toutes les lettres majuscules remplacées par des lettres minuscules.
23str.downcase!
Identique à downcase, mais str est modifié et renvoyé.
24str.dump
Renvoie une version de str avec tous les caractères non imprimables remplacés par la notation \nnn et tous les caractères spéciaux échappés.
25str.each(separator=$/) { |substr| block }
Divise str en utilisant l'argument comme séparateur d'enregistrement (par défaut $/), en passant chaque sous-chaîne au bloc fourni.
26str.each_byte { |fixnum| block }
Passe chaque octet de str au bloc, en retournant chaque octet en notation décimale.
27str.each_line(separator=$/) { |substr| block }
Divise str en utilisant l'argument comme séparateur d'enregistrement (par défaut $/), en passant chaque sous-chaîne au bloc fourni.
28str.empty?
Renvoie true si str est vide (c'est-à-dire a une longueur de 0).
29str.eql?(other)
Deux chaînes sont égales si elles ont la même longueur et le même contenu.
30str.gsub(pattern, replacement) [ou]
str.gsub(pattern) { |match| block }

Renvoie une copie de str dans laquelle toutes les occurrences de pattern sont remplacées par replacement ou la valeur de block. pattern est généralement une expression régulière Regexp ; s'il s'agit d'une String, aucun métacaractère d'expression régulière n'est interprété (c'est-à-dire que /\d/ correspondra à un chiffre, mais '\d' correspondra à une barre oblique inverse suivie d'un « d »).
31str[fixnum] [ou] str[fixnum,fixnum] [ou] str[range] [ou] str[regexp] [ou] str[regexp, fixnum] [ou] str[other_str]
Utilisez les références de paramètre suivantes pour str : si le paramètre est un Fixnum, retournez l'encodage de caractère du fixnum ; si le paramètre est deux Fixnums, retournez une sous-chaîne commençant au décalage (le premier fixnum) jusqu'à la longueur (le deuxième fixnum) ; si le paramètre est un intervalle, retournez une sous-chaîne dans cet intervalle ; si le paramètre est une regexp, retournez la partie de la chaîne qui correspond ; si le paramètre est une regexp avec un fixnum, retournez les données de correspondance à la position fixnum ; si le paramètre est other_str, retournez la sous-chaîne qui correspond à other_str. Un Fixnum négatif commence à partir de la fin de la chaîne à -1.
32str[fixnum] = fixnum [ou] str[fixnum] = new_str [ou] str[fixnum, fixnum] = new_str [ou] str[range] = aString [ou] str[regexp] =new_str [ou] str[regexp, fixnum] =new_str [ou] str[other_str] = new_str ]
Remplace la chaîne entière ou une partie de la chaîne. Synonyme de slice!.
33str.gsub!(pattern, replacement) [ou] str.gsub!(pattern) { |match| block }
Effectue les remplacements de String#gsub, en renvoyant str, ou renvoie nil si aucun remplacement n'a été effectué.
34str.hash
Renvoie un hash basé sur la longueur et le contenu de la chaîne.
35str.hex
Traite les premiers caractères de str comme une chaîne de chiffres hexadécimaux (un signe optionnel et un 0x optionnel), et renvoie le nombre correspondant. Renvoie zéro en cas d'erreur.
36str.include? other_str [ou] str.include? fixnum
Renvoie true si str contient la chaîne ou le caractère donné.
37str.index(substring [, offset]) [ou]
str.index(fixnum [, offset]) [ou]
str.index(regexp [, offset])

Renvoie l'indice de la première occurrence dans str de la sous-chaîne, du caractère (fixnum) ou du motif (regexp) donnés. Renvoie nil si aucune occurrence n'est trouvée. Si un second paramètre est fourni, il spécifie la position dans la chaîne où commencer la recherche.
38str.insert(index, other_str)
Insère other_str avant le caractère à l'indice donné, en modifiant str. Les valeurs d'indice négatives sont comptées à partir de la fin de la chaîne et insèrent après le caractère donné. L'intention est de commencer à insérer une chaîne à l'indice donné.
39str.inspect
Renvoie une version imprimable de str, avec les caractères spéciaux échappés.
40str.intern [ou] str.to_sym
Renvoie le symbole correspondant à str, en créant le symbole s'il n'existe pas déjà.
41str.length
Renvoie la longueur de str. Comparez-la avec size.
42str.ljust(integer, padstr=' ')
Si integer est supérieur à la longueur de str, renvoie une nouvelle chaîne de longueur integer avec str aligné à gauche et complété par padstr. Sinon, renvoie str.
43str.lstrip
Renvoie une copie de str avec les espaces blancs de début supprimés.
44str.lstrip!
Supprime les espaces blancs de début de str, ou renvoie nil s'il n'y a aucun changement.
45str.match(pattern)
Si pattern n'est pas une expression régulière, convertit pattern en Regexp, puis appelle sa méthode match sur str.
46str.oct
Traite les premiers caractères de str comme une chaîne de chiffres décimaux (un signe facultatif), et renvoie le nombre correspondant. Renvoie 0 si la conversion échoue.
47str.replace(other_str)
Remplace le contenu de str par les valeurs correspondantes de other_str.
48str.reverse
Renvoie une nouvelle chaîne qui est l'inverse de str.
49str.reverse!
Inverse str, en modifiant str sur place et en la renvoyant.
50str.rindex(substring [, fixnum]) [ou]
str.rindex(fixnum [, fixnum]) [ou]
str.rindex(regexp [, fixnum])

Renvoie l'index de la dernière occurrence de la substring donnée, du caractère (fixnum) donné ou du motif (regexp) donné dans str. Renvoie nil si aucune occurrence n'est trouvée. Si un second paramètre est fourni, il spécifie la position dans la chaîne où terminer la recherche. Les caractères au-delà de ce point ne sont pas pris en compte.
51str.rjust(integer, padstr=' ')
Si integer est supérieur à la longueur de str, renvoie une nouvelle chaîne de longueur integer avec str aligné à droite et complété par padstr. Sinon, renvoie str.
52str.rstrip
Renvoie une copie de str avec les espaces blancs de fin supprimés.
53str.rstrip!
Supprime les espaces blancs en fin de str, ou renvoie nil s'il n'y a aucun changement.
54str.scan(pattern) [ou]
str.scan(pattern) { |match, ...| block }

Les deux formes font correspondre pattern (qui peut être une Regexp ou une String) à str. Pour chaque correspondance, un résultat est généré et ajouté au tableau de résultats ou transmis au bloc. Si pattern ne contient aucun groupe, chaque résultat individuel consiste en la chaîne correspondante, $&. Si pattern contient des groupes, chaque résultat individuel est un tableau contenant chaque entrée de groupe.
55str.slice(fixnum) [ou] str.slice(fixnum, fixnum) [ou]
str.slice(range) [ou] str.slice(regexp) [ou]
str.slice(regexp, fixnum) [ou] str.slice(other_str)
Voir str[fixnum], etc.
str.slice!(fixnum) [ou] str.slice!(fixnum, fixnum) [ou] str.slice!(range) [ou] str.slice!(regexp) [ou] str.slice!(other_str)

Supprime la portion spécifiée de str et renvoie la portion supprimée. Si la valeur est hors limites, la forme avec un paramètre Fixnum génère une IndexError. La forme range génère une RangeError, et les formes Regexp et String ignorent l'action.
56str.split(pattern=$;, [limit])

Découpe str en sous-chaînes selon un délimiteur et renvoie un tableau de ces sous-chaînes.

Sipatternest une String, alors lors de la découpe de str, il est utilisé comme délimiteur. Si pattern est un seul espace, alors str est découpé en fonction des espaces blancs, en ignorant les espaces blancs de début et les caractères d'espacement consécutifs.

Sipatternest une Regexp, alors str est découpé aux endroits où pattern correspond. Lorsque pattern correspond à une chaîne de longueur zéro, str est découpé en caractères individuels.

Si le paramètrepatternest omis, la valeur de $; est utilisée. Si $; est nil (la valeur par défaut), str est découpé en fonction des espaces blancs, comme si ` ` était spécifié comme délimiteur.

Si le paramètrelimitest omis, les champs nuls de fin sont supprimés. Si limit est un nombre positif, au plus ce nombre de champs est renvoyé (si limit vaut 1, la chaîne entière est renvoyée comme seule entrée du tableau). Si limit est un nombre négatif, le nombre de champs renvoyés est illimité, et les champs nuls de fin ne sont pas supprimés.

57str.squeeze([other_str]*)
Construit un ensemble de caractères à partir des paramètres other_str en utilisant la procédure décrite pour String#count. Renvoie une nouvelle chaîne dans laquelle les caractères identiques apparaissant dans l'ensemble sont remplacés par un seul caractère. Si aucun argument n'est donné, tous les caractères identiques sont remplacés par un seul caractère.
58str.squeeze!([other_str]*)
Identique à squeeze, mais str est modifié sur place et renvoyé, ou nil si aucune modification.
59str.strip
Renvoie une copie de str avec les espaces blancs de début et de fin supprimés.
60str.strip!
Supprime les espaces de début et de fin de str, ou renvoie nil si aucun changement n'a été effectué.
61str.sub(pattern, replacement) [ou]
str.sub(pattern) { |match| block }

Renvoie une copie de str dans laquelle la première occurrence de pattern est remplacée par replacement ou par la valeur du bloc. pattern est généralement une Regexp ; s'il s'agit d'une String, aucun métacaractère d'expression régulière n'est interprété.
62str.sub!(pattern, replacement) [ou]
str.sub!(pattern) { |match| block }

Effectue les substitutions de String#sub et renvoie str, ou renvoie nil si aucune substitution n'a été effectuée.
63str.succ [ou] str.next
Renvoie le successeur de str.
64str.succ! [ou] str.next!
Équivalent à String#succ, mais str est modifiée sur place et renvoyée.
65str.sum(n=16)
Retourne la somme de contrôle sur n bits des caractères de str, où n est le paramètre Fixnum facultatif, avec 16 comme valeur par défaut. Le résultat est simplement la somme des valeurs binaires de chaque caractère de str, modulo 2n - 1. Ce n'est pas une somme de contrôle particulièrement bonne.
66str.swapcase
Retourne une copie de str avec toutes les lettres majuscules converties en minuscules et toutes les lettres minuscules converties en majuscules.
67str.swapcase!
Équivalent à String#swapcase, mais str est modifiée sur place et renvoyée, ou nil si aucun changement.
68str.to_f
Retourne le résultat de l'interprétation des premiers caractères de str comme un nombre à virgule flottante. Les caractères supplémentaires au-delà de la fin des chiffres significatifs sont ignorés. S'il n'y a pas de nombre valide au début de str, retourne 0.0. Cette méthode ne génère pas d'exceptions.
69str.to_i(base=10)
Retourne le résultat de l'interprétation des premiers caractères de str comme un entier en base (base 2, 8, 10 ou 16). Les caractères supplémentaires au-delà de la fin des chiffres valides sont ignorés. S'il n'y a pas de nombre valide au début de str, retourne 0. Cette méthode ne génère pas d'exceptions.
70str.to_s [ou] str.to_str
Retourne le récepteur.
71str.tr(from_str, to_str)
Renvoie une copie de str avec les caractères de from_str remplacés par les caractères correspondants de to_str. Si to_str est plus court que from_str, il est complété avec son dernier caractère. Les deux chaînes peuvent utiliser la notation c1.c2 pour représenter des plages de caractères. Si from_str commence par ^, cela signifie tous les caractères sauf ceux énumérés.
72str.tr!(from_str, to_str)
Équivalent à String#tr, mais str est modifié sur place et renvoyé, ou nil si aucun changement.
73str.tr_s(from_str, to_str)
Traite str selon les règles décrites pour String#tr, puis supprime les caractères en double qui affecteraient la traduction.
74str.tr_s!(from_str, to_str)
Équivalent à String#tr_s, mais str est modifié sur place et renvoyé, ou nil si aucun changement.
75str.unpack(format)
Décode str (qui peut contenir des données binaires) selon la chaîne de format, en renvoyant un tableau de chaque valeur extraite. Les caractères de format consistent en une série de directives d'un seul caractère. Chaque directive peut être suivie d'un nombre, indiquant le nombre de fois où répéter cette directive. Un astérisque (*) utilise tous les éléments restants. Les directives sSiIlL peuvent chacune être suivies d'un souligné (_) pour utiliser la taille native de la plateforme sous-jacente pour le type spécifié ; sinon, une taille cohérente indépendante de la plateforme est utilisée. Les espaces blancs dans la chaîne de format sont ignorés.
76str.upcase
Renvoie une copie de str avec toutes les lettres minuscules remplacées par des lettres majuscules. L'opération ne dépend pas de l'environnement ; seuls les caractères de a à z sont affectés.
77str.upcase!
Change le contenu de str en majuscules, ou renvoie nil s'il n'y a aucun changement.
78str.upto(other_str) { |s| block }
Itère sur des valeurs consécutives, en commençant par str et en terminant par other_str (inclus), en passant chaque valeur à tour de rôle au bloc. La méthode String#succ est utilisée pour générer chaque valeur.

Directives de unpack de String

Le tableau suivant répertorie les directives de unpack de la méthode String#unpack.

InstructionRetourDescription
AStringSupprime les caractères nuls et les espaces de fin.
aStringString.
BStringExtrait les bits de chaque caractère (bit de poids fort en premier).
bStringExtrait les bits de chaque caractère (bit de poids faible en premier).
CFixnumExtrait un caractère en tant qu'entier non signé.
cFixnumExtrait un caractère en tant qu'entier.
D, dFloatTraite sizeof(double) caractères comme un double natif.
EFloatTraiter sizeof(double) caractères comme un double little-endian.
eFloatTraiter sizeof(float) caractères comme un float little-endian.
F, fFloatTraiter sizeof(float) caractères comme un float natif.
GFloatTraiter sizeof(double) caractères comme un double en ordre d'octets réseau.
gFloatTraiter sizeof(float) caractères comme un float en ordre d'octets réseau.
HStringExtraire l'hexadécimal de chaque caractère (poids fort en premier).
hStringExtraire l'hexadécimal de chaque caractère (poids faible en premier).
IIntegerTraiter sizeof(int) caractères consécutifs de longueur (modifiée par _) comme un entier natif.
iIntegerTraiter sizeof(int) caractères consécutifs de longueur (modifiée par _) comme un entier natif signé.
LIntegerTraiter quatre (modifié par _) caractères consécutifs comme un entier long natif non signé.
lIntegerTraiter quatre (modifié par _) caractères consécutifs comme un entier long natif signé.
MStringQuoted-printable.
mStringEncodage Base64.
NIntegerTraiter quatre caractères comme un unsigned long dans l'ordre des octets réseau.
nFixnumTraiter deux caractères comme un unsigned short dans l'ordre des octets réseau.
PStringTraiter sizeof(char *) caractères comme un pointeur, et retourner \emph{len} caractères depuis l'emplacement référencé.
pStringTraiter sizeof(char *) caractères comme un pointeur vers une chaîne de caractères terminée par un caractère nul.
QIntegerTraiter huit caractères comme un unsigned quad word (64 bits).
qIntegerTraiter huit caractères comme un signed quad word (64 bits).
SFixnumTraiter deux caractères consécutifs (différents si _ est utilisé) comme un unsigned short dans l'ordre des octets natif.
sFixnumTraiter deux caractères consécutifs (différents si _ est utilisé) comme un signed short dans l'ordre des octets natif.
UIntegerCaractère UTF-8 comme un unsigned integer.
uStringEncodage UU.
VFixnumTraiter quatre caractères comme un unsigned long dans l'ordre des octets little-endian.
vFixnumTraiter deux caractères comme un entier court non signé dans l'ordre des octets little-endian.
wIntegerEntier compressé BER.
X Sauter un caractère vers l'arrière.
x Sauter un caractère vers l'avant.
ZStringUtilisé avec *, supprime les nuls de fin jusqu'au premier nul.
@ Sauter le décalage donné par le paramètre length.

Exemples

Essayez les exemples suivants pour extraire diverses données.

"abc \0\0abc \0\0".unpack('A6Z6') #=> ["abc", "abc "] "abc \0\0".unpack('a3a3') #=> ["abc", " \000\000"] "abc \0abc \0".unpack('Z*Z*') #=> ["abc ", "abc "] "aa".unpack('b8B8') #=> ["10000110", "01100001"] "aaa".unpack('h2H2c') #=> ["16", "61", 97] "\xfe\xff\xfe\xff".unpack('sS') #=> [-2, 65534] "now=20is".unpack('M*') #=> ["now is"] "whole".unpack('xax2aX2aX1aX2a') #=> ["h", "e", "l", "l", "o"]
Autres extensions