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 :
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 :
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
Essayez-le »
L'exemple ci-dessus produit le résultat suivant :
你好 Joe, Mary 在哪?
Effectuer des opérations mathématiques dans les chaînes :
Exemples
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
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 inverse | Caractère hexadécimal | Description |
|---|---|---|
| \a | 0x07 | Alerte (cloche) |
| \b | 0x08 | Retour arrière |
| \cx | Contrôle-x | |
| \C-x | Contrôle-x | |
| \e | 0x1b | Échap |
| \f | 0x0c | Saut de page |
| \M-\C-x | Méta-Contrôle-x | |
| \n | 0x0a | Nouvelle ligne |
| \nnn | Représentation octale, où n va de 0 à 7 | |
| \r | 0x0d | Retour chariot |
| \s | 0x20 | Espace |
| \t | 0x09 | Onglet |
| \v | 0x0b | Tabulation 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.
| Encodage | Description |
|---|---|
| a | ASCII (identique à none). C'est la valeur par défaut. |
| e | EUC. |
| n | None (identique à ASCII). |
| u | UTF-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 :
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
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 |
|---|---|
| 1 | str % 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. |
| 2 | str * integer Renvoie une nouvelle chaîne contenant integer copies de str. En d'autres termes, str est répété integer fois. |
| 3 | str + other_str Concatène other_str à str. |
| 4 | str << 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. |
| 5 | str <=> other_str Compare str avec other_str, renvoyant -1 (inférieur à), 0 (égal à) ou 1 (supérieur à). La comparaison est sensible à la casse. |
| 6 | str == 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. |
| 7 | str =~ obj Fait correspondre str au motif d'expression régulière obj. Renvoie la position où la correspondance commence, sinon renvoie false. |
| 8 | str[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. |
| 9 | str.capitalize Convertit la première lettre d’une chaîne en majuscule et le reste en minuscules pour l’affichage. |
| 10 | str.capitalize! Identique à capitalize, mais capitalize! renvoie nil si aucune modification n’est effectuée. |
| 11 | str.casecmp Comparaison de chaînes insensible à la casse. |
| 12 | str.center Centre la chaîne de caractères. |
| 13 | str.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. |
| 14 | str.chomp! Identique à chomp, mais str est modifiée et renvoyée. |
| 15 | str.chop Supprime le dernier caractère de str. |
| 16 | str.chop! Identique à chop, mais str est modifiée et renvoyée. |
| 17 | str.concat(other_str) Concatène other_str à str. |
| 18 | str.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. |
| 19 | str.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 /. |
| 20 | str.delete(other_str, ...) Renvoie une copie de str dans laquelle tous les caractères de l'intersection des arguments sont supprimés. |
| 21 | str.delete!(other_str, ...) Identique à delete, mais str est modifié et renvoyé. |
| 22 | str.downcase Renvoie une copie de str avec toutes les lettres majuscules remplacées par des lettres minuscules. |
| 23 | str.downcase! Identique à downcase, mais str est modifié et renvoyé. |
| 24 | str.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. |
| 25 | str.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. |
| 26 | str.each_byte { |fixnum| block } Passe chaque octet de str au bloc, en retournant chaque octet en notation décimale. |
| 27 | str.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. |
| 28 | str.empty? Renvoie true si str est vide (c'est-à-dire a une longueur de 0). |
| 29 | str.eql?(other) Deux chaînes sont égales si elles ont la même longueur et le même contenu. |
| 30 | str.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 »). |
| 31 | str[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. |
| 32 | str[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!. |
| 33 | str.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é. |
| 34 | str.hash Renvoie un hash basé sur la longueur et le contenu de la chaîne. |
| 35 | str.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. |
| 36 | str.include? other_str [ou] str.include? fixnum Renvoie true si str contient la chaîne ou le caractère donné. |
| 37 | str.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. |
| 38 | str.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é. |
| 39 | str.inspect Renvoie une version imprimable de str, avec les caractères spéciaux échappés. |
| 40 | str.intern [ou] str.to_sym Renvoie le symbole correspondant à str, en créant le symbole s'il n'existe pas déjà. |
| 41 | str.length Renvoie la longueur de str. Comparez-la avec size. |
| 42 | str.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. |
| 43 | str.lstrip Renvoie une copie de str avec les espaces blancs de début supprimés. |
| 44 | str.lstrip! Supprime les espaces blancs de début de str, ou renvoie nil s'il n'y a aucun changement. |
| 45 | str.match(pattern) Si pattern n'est pas une expression régulière, convertit pattern en Regexp, puis appelle sa méthode match sur str. |
| 46 | str.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. |
| 47 | str.replace(other_str) Remplace le contenu de str par les valeurs correspondantes de other_str. |
| 48 | str.reverse Renvoie une nouvelle chaîne qui est l'inverse de str. |
| 49 | str.reverse! Inverse str, en modifiant str sur place et en la renvoyant. |
| 50 | str.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. |
| 51 | str.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. |
| 52 | str.rstrip Renvoie une copie de str avec les espaces blancs de fin supprimés. |
| 53 | str.rstrip! Supprime les espaces blancs en fin de str, ou renvoie nil s'il n'y a aucun changement. |
| 54 | str.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. |
| 55 | str.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. |
| 56 | str.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. |
| 57 | str.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. |
| 58 | str.squeeze!([other_str]*) Identique à squeeze, mais str est modifié sur place et renvoyé, ou nil si aucune modification. |
| 59 | str.strip Renvoie une copie de str avec les espaces blancs de début et de fin supprimés. |
| 60 | str.strip! Supprime les espaces de début et de fin de str, ou renvoie nil si aucun changement n'a été effectué. |
| 61 | str.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é. |
| 62 | str.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. |
| 63 | str.succ [ou] str.next Renvoie le successeur de str. |
| 64 | str.succ! [ou] str.next! Équivalent à String#succ, mais str est modifiée sur place et renvoyée. |
| 65 | str.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. |
| 66 | str.swapcase Retourne une copie de str avec toutes les lettres majuscules converties en minuscules et toutes les lettres minuscules converties en majuscules. |
| 67 | str.swapcase! Équivalent à String#swapcase, mais str est modifiée sur place et renvoyée, ou nil si aucun changement. |
| 68 | str.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. |
| 69 | str.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. |
| 70 | str.to_s [ou] str.to_str Retourne le récepteur. |
| 71 | str.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. |
| 72 | str.tr!(from_str, to_str) Équivalent à String#tr, mais str est modifié sur place et renvoyé, ou nil si aucun changement. |
| 73 | str.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. |
| 74 | str.tr_s!(from_str, to_str) Équivalent à String#tr_s, mais str est modifié sur place et renvoyé, ou nil si aucun changement. |
| 75 | str.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. |
| 76 | str.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. |
| 77 | str.upcase! Change le contenu de str en majuscules, ou renvoie nil s'il n'y a aucun changement. |
| 78 | str.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.
| Instruction | Retour | Description |
|---|---|---|
| A | String | Supprime les caractères nuls et les espaces de fin. |
| a | String | String. |
| B | String | Extrait les bits de chaque caractère (bit de poids fort en premier). |
| b | String | Extrait les bits de chaque caractère (bit de poids faible en premier). |
| C | Fixnum | Extrait un caractère en tant qu'entier non signé. |
| c | Fixnum | Extrait un caractère en tant qu'entier. |
| D, d | Float | Traite sizeof(double) caractères comme un double natif. |
| E | Float | Traiter sizeof(double) caractères comme un double little-endian. |
| e | Float | Traiter sizeof(float) caractères comme un float little-endian. |
| F, f | Float | Traiter sizeof(float) caractères comme un float natif. |
| G | Float | Traiter sizeof(double) caractères comme un double en ordre d'octets réseau. |
| g | Float | Traiter sizeof(float) caractères comme un float en ordre d'octets réseau. |
| H | String | Extraire l'hexadécimal de chaque caractère (poids fort en premier). |
| h | String | Extraire l'hexadécimal de chaque caractère (poids faible en premier). |
| I | Integer | Traiter sizeof(int) caractères consécutifs de longueur (modifiée par _) comme un entier natif. |
| i | Integer | Traiter sizeof(int) caractères consécutifs de longueur (modifiée par _) comme un entier natif signé. |
| L | Integer | Traiter quatre (modifié par _) caractères consécutifs comme un entier long natif non signé. |
| l | Integer | Traiter quatre (modifié par _) caractères consécutifs comme un entier long natif signé. |
| M | String | Quoted-printable. |
| m | String | Encodage Base64. |
| N | Integer | Traiter quatre caractères comme un unsigned long dans l'ordre des octets réseau. |
| n | Fixnum | Traiter deux caractères comme un unsigned short dans l'ordre des octets réseau. |
| P | String | Traiter sizeof(char *) caractères comme un pointeur, et retourner \emph{len} caractères depuis l'emplacement référencé. |
| p | String | Traiter sizeof(char *) caractères comme un pointeur vers une chaîne de caractères terminée par un caractère nul. |
| Q | Integer | Traiter huit caractères comme un unsigned quad word (64 bits). |
| q | Integer | Traiter huit caractères comme un signed quad word (64 bits). |
| S | Fixnum | Traiter deux caractères consécutifs (différents si _ est utilisé) comme un unsigned short dans l'ordre des octets natif. |
| s | Fixnum | Traiter deux caractères consécutifs (différents si _ est utilisé) comme un signed short dans l'ordre des octets natif. |
| U | Integer | Caractère UTF-8 comme un unsigned integer. |
| u | String | Encodage UU. |
| V | Fixnum | Traiter quatre caractères comme un unsigned long dans l'ordre des octets little-endian. |
| v | Fixnum | Traiter deux caractères comme un entier court non signé dans l'ordre des octets little-endian. |
| w | Integer | Entier compressé BER. |
| X | Sauter un caractère vers l'arrière. | |
| x | Sauter un caractère vers l'avant. | |
| Z | String | Utilisé 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.