Chaîne de rubis


Les objets String dans Ruby sont utilisés pour stocker ou manipuler des séquences d'un ou plusieurs octets.

Les chaînes Ruby sont divisées en chaînes de guillemets simples (') et en chaînes de guillemets doubles ("). La différence est que les chaînes de guillemets doubles peuvent prendre en charge plus de caractères d'échappement.

Chaîne de guillemets simples Chaîne

La chaîne la plus simple est une chaîne entre guillemets simples, c'est-à-dire stocker la chaîne entre guillemets simples :

'这是一个 Ruby 程序的字符串'

Si vous devez utiliser des guillemets simples à l'intérieur d'une chaîne entre guillemets simples, alors vous devez utiliser une barre oblique inverse ( ) dans une chaîne entre guillemets simples afin que l'interpréteur Ruby ne pense pas que le caractère guillemet simple est le symbole de fin de la chaîne :

'Won\'t you read O\'Reilly\'s book?'

Une barre oblique inverse peut également échapper à une autre barre oblique inverse afin que la deuxième barre oblique inverse elle-même n'est pas interprété comme un caractère d'échappement.

Les fonctionnalités suivantes sont liées aux chaînes dans Ruby.

Dans les chaînes entre guillemets, nous pouvons utiliser

#{}

les signes dièse et accolades pour calculer la valeur des expressions : Variables intégrées dans des chaînes :

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

name1 = "Joe"
name2 = "Mary"
puts "你好 #{name1},  #{name2} 在哪?"


Le résultat de l'exemple ci-dessus est :

你好 Joe,  Mary 在哪?

Opérations mathématiques dans la chaîne :

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

x, y, z = 12, 36, 72
puts "x 的值为 #{ x }"
puts "x + y 的值为 #{ x + y }"
puts "x + y + z 的平均值为 #{ (x + y + z)/3 }"


La sortie de l'exemple ci-dessus est Le résultat de sortie est :

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

Ruby prend également en charge une variable de chaîne guidée par %q et %Q. %q utilise une règle de guillemet simple, et %Q est une règle de guillemets doubles. Ce qui suit Puis un autre (! [ { Le délimiteur de début de etc. et } ] ) Le délimiteur de fin de etc.

Le caractère suivant q ou Q est le délimiteur. Le délimiteur peut être n'importe quel caractère non alphanumérique à un octet. Par exemple : [, {, (, <,!, etc., la chaîne sera lue jusqu'à ce que. un terminateur correspondant est trouvé.

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

desc1 = %Q{Ruby 的字符串可以使用 '' 和 ""。}
desc2 = %q|Ruby 的字符串可以使用 '' 和 ""。|

puts desc1
puts desc2


Le résultat de l'exemple ci-dessus est :

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

Caractères d'échappement

L'indice

répertorie l'échappement. caractères ou caractères non imprimables qui peuvent être échappés à l'aide du symbole barre oblique inverse <. 🎜>

Remarque :

Dans une chaîne entourée de guillemets doubles, les caractères d'échappement seront analysés dans une chaîne entourée de guillemets simples. , les caractères d'échappement ne seront pas analysés tels quels

.

反斜杠符号十六进制字符描述
a0x07报警符
b0x08退格键
cx Control-x
C-x Control-x
e0x1b转义符
f0x0c换页符
M-C-x Meta-Control-x
n0x0a换行符
nnn 八进制表示法,其中 n 的范围为 0.7
r0x0d回车符
s0x20空格符
t0x09制表符
v0x0b垂直制表符
x 字符 x
xnn 十六进制表示法,其中 n 的范围为 0.9、 a.f 或 A.F

Codage des caractères

Le jeu de caractères par défaut de Ruby est ASCII et les caractères peuvent être représentés par un seul octet. Si vous utilisez UTF-8 ou d'autres jeux de caractères modernes, les caractères peuvent être représentés par un à quatre octets.

Vous pouvez modifier le jeu de caractères en utilisant $KCODE au début de votre programme, comme ceci :

$KCODE = 'u'

Voici les valeurs possibles pour $KCODE.

编码描述
aASCII (与 none 相同)。这是默认的。
eEUC。
nNone (与 ASCII 相同)。
uUTF-8。

Méthodes intégrées String

Nous avons besoin d'une instance d'un objet String pour appeler la méthode String. Voici comment créer une instance d'un objet String :

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

Cela renverra un nouvel objet String contenant une copie de str. Désormais, en utilisant l'objet str, nous pouvons appeler n'importe laquelle des méthodes d'instance disponibles. Par exemple :

#!/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) :

Numéro de sérieMéthode et description
1str % arg
Formater les chaînes à l'aide des spécifications de format. Si arg contient plusieurs substitutions, alors arg doit être un tableau. Pour plus d'informations sur les spécifications de format, consultez sprintf sous « Modules du noyau ».
2str * integer
Renvoie une nouvelle chaîne contenant des chaînes entières. En d’autres termes, str est répété plusieurs fois entières.
3str + other_str
Concaténer other_str à str.
4str << obj
Concatène un objet à une chaîne. Si l'objet est un nombre fixe Fixnum compris dans la plage 0,255, il est converti en caractère. Comparez cela à concat.
5str <=> other_str
Comparez str avec other_str et retournez -1 (inférieur à), 0 ( égal à) ou 1 (supérieur à). Les comparaisons sont sensibles à la casse.
6str == obj
Vérifie l'égalité de str et obj. Renvoie false si obj n'est pas une chaîne, true si str <=>
7str =~ obj
Correspond à str selon le modèle d'expression régulière obj. Renvoie la position où commence la correspondance, sinon renvoie false.
8
9 str.capitalize
Convertissez la chaîne en lettres majuscules pour l'affichage.
10str.capitalize!
Identique à majuscule, mais str est modifié et renvoyé.
11str.casecmp
Comparaison de chaînes insensibles à la casse.
12str.center
Centrez la chaîne.
13str.chomp
Supprimez le séparateur d'enregistrement ($/) de la fin de la chaîne, généralement n. S'il n'y a pas de séparateur d'enregistrements, aucune action n'est effectuée.
14str.chomp!
Identique à chomp, mais str est modifié et renvoyé.
15str.chop
Supprimer le dernier caractère de str.
16str.chop!
Identique à chop, mais str est modifié et renvoyé.
17str.concat(other_str)
Concaténer other_str à str.
18str.count(str, ...)
Donne un nombre à un ou plusieurs jeux de caractères. S'il existe plusieurs jeux de caractères, l'intersection de ces jeux est comptée.
19str.crypt(other_str)
Appliquer un hachage cryptographique unidirectionnel à str. L'argument est une chaîne de deux caractères, chaque caractère étant compris entre a.z, A.Z, 0.9, . ou /.
20str.delete(other_str, ...)
Renvoie une copie de str avec tous les caractères à l'intersection des arguments supprimés.
21str.delete!(other_str, ...)
Identique à delete, mais str changera et reviendra .
22str.downcase
Renvoie une copie de str, avec toutes les lettres majuscules remplacées par des lettres minuscules.
23str.downcase !
Identique à downcase, mais str sera modifié et renvoyé.
24str.dump
Renvoie une version de str avec tous les caractères non imprimables remplacés par des symboles nnn et tous les caractères spéciaux sont échappés.
25str.each(separator=$/) { |substr| block }
Utiliser le paramètre comme séparateur d'enregistrement ( Le la valeur par défaut est $/) chaîne délimitée, passant chaque sous-chaîne au bloc fourni.
26str.each_byte { |fixnum| block }
Passer chaque octet de str au bloc, en octets La représentation décimale de chaque octet est renvoyé.
27str.each_line(separator=$/) { |substr| block }
Utiliser le paramètre comme séparateur d'enregistrement ( Le la valeur par défaut est $/) chaîne délimitée, passant chaque sous-chaîne au bloc fourni.
28str.empty?
Renvoie vrai si str est vide (c'est-à-dire a une longueur de 0).
29str.eql?(other)
Si deux chaînes ont la même longueur et le même contenu, alors ces deux chaînes sont égal.
30str.gsub(modèle, remplacement) [ou]
str.gsub(modèle) { |match| bloc }

Renvoie une copie de str, avec toutes les occurrences de pattern remplacées par la valeur de remplacement ou de bloc. pattern est généralement une expression régulière ; s'il s'agit d'une chaîne, 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 paramètres suivants pour référencer str : si le paramètre est un Fixnum, alors l'encodage de caractères de fixnum est renvoyé si le paramètre est deux ; Fixnum, puis un de La sous-chaîne commençant à partir du décalage (le premier fixnum) et se terminant à la longueur (le deuxième fixnum) si le paramètre est range, une sous-chaîne dans la plage est renvoyée si le paramètre est regexp, la partie de ; la chaîne correspondante est renvoyée ; si le paramètre est une expression rationnelle avec fixnum, alors les données correspondantes à la position fixnum seront renvoyées ; si le paramètre est other_str, alors la sous-chaîne correspondant à other_str sera renvoyée ; Un Fixnum négatif commence à -1 à partir de la fin de la chaîne.
32str[fixnum] = fixnum [ou] str[fixnum] = new_str [ou] str[fixnum, fixnum] = new_str [ou ] str[plage] = aString [ou] str[regexp] =new_str [ou] str[regexp, fixnum] =new_str [ou] str[other_str] = new_str ]
Remplace une chaîne entière ou une partie de chaîne. Synonyme de tranche !.
33str.gsub!(modèle, remplacement) [ou] str.gsub!(modèle) { |match| bloc }
Effectuez le remplacement de String#gsub et renvoyez str Si aucun remplacement n'est effectué, il renvoie nil.
34str.hash
Renvoie un hachage basé sur la longueur et le contenu de la chaîne.
35str.hex
Traitez le caractère principal de str comme une chaîne de chiffres hexadécimaux (un symbole facultatif et un symbole facultatif 0x), et renvoie le numéro correspondant. Renvoie zéro si une erreur se produit.
36str.include? other_str [or] str.include
Si str contient la chaîne ou le caractère donné, renvoie vrai.
37str.index(substring [, offset]) [ou]
str.index(fixnum [, offset]) [ou ]
str.index(regexp [, offset])

Renvoie l'index de la première occurrence de la sous-chaîne, du caractère (fixnum) ou du modèle (regexp) donné dans str. Renvoie zéro s'il n'est pas trouvé. Si le deuxième argument est fourni, spécifie la position dans la chaîne pour commencer la recherche.
38str.insert(index, other_str)
Insérer other_str avant le caractère à l'index donné, en modifiant str. Les index négatifs comptent à partir de la fin de la chaîne et sont insérés après le caractère donné. L'intention est d'insérer une chaîne commençant à l'index donné.
39str.inspect
Renvoie une version imprimable de str, avec des caractères spéciaux échappés.
40str.intern [or] str.to_sym
Renvoie le symbole correspondant à str, s'il n'existe pas avant , Le symbole est créé.
41str.length
Renvoie la longueur de str. Comparez-le à la taille.
42str.ljust(integer, padstr=' ')
Si l'entier est supérieur à la longueur de str, le la longueur renvoyée est une nouvelle chaîne d'entiers, alignée à gauche avec str et complétée par padstr. Sinon, str est renvoyé.
43str.lstrip
Renvoie une copie de str avec les espaces de début supprimés.
44str.lstrip!
Supprime les espaces de début de str ou renvoie zéro s'il n'y a aucun changement.
45str.match(pattern)
Si le modèle n'est pas une expression régulière, convertissez le modèle en expression régulière Regexp , et appelle ensuite sa méthode de correspondance sur str.
46str.oct
Traitez le caractère principal de str comme une chaîne de chiffres décimaux (un symbole facultatif) , et renvoie le numéro correspondant. Si la conversion échoue, 0 est renvoyé.
47str.replace(other_str)
Remplacez le contenu dans str par la valeur correspondante dans other_str.
48str.reverse
Renvoie une nouvelle chaîne qui est l'ordre inverse de str.
49str.reverse !
Inverser la str, la str changera et reviendra.
50str.rindex(substring [, fixnum]) [ou]
str.rindex(fixnum [, fixnum]) [ou ]
str.rindex(regexp [, fixnum])

Renvoie l'index de la dernière occurrence de la sous-chaîne, du caractère (fixnum) ou du modèle (regexp) donné dans str. Renvoie zéro s'il n'est pas trouvé. Si le deuxième argument est fourni, spécifie la position dans la chaîne à laquelle terminer la recherche. Les personnages au-delà de ce point ne seront pas pris en compte.
51str.rjust(integer, padstr=' ')
Si l'entier est supérieur à la longueur de str, le la longueur renvoyée est une nouvelle chaîne d'entiers, alignée à droite avec str et complétée par padstr. Sinon, str est renvoyé.
52str.rstrip
Renvoie une copie de str avec les espaces de fin supprimés.
53str.rstrip!
Supprimez les espaces de fin de str ou renvoyez nil s'il n'y a aucun changement.
54str.scan(motif) [ou]
str.scan(motif) { |match, ...| bloc }

Deux formes correspondent à un modèle (peut être une expression régulière Regexp ou une chaîne String) pour parcourir str. Pour chaque correspondance, un résultat est généré, qui est ajouté au tableau de résultats ou transmis au bloc. Si le modèle ne contient aucun regroupement, chaque résultat individuel est constitué de la chaîne correspondante, $&. Si le modèle contient des groupes, chaque résultat individuel est un tableau contenant une entrée pour chaque 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 partie spécifiée de str et renvoie la partie supprimée. Si la valeur est hors plage et que l'argument prend la forme Fixnum, une IndexError sera générée. Si le paramètre est sous forme de plage, une RangeError sera générée. Si le paramètre est sous forme de Regexp et String, l'action d'exécution sera ignorée.
56str.split(pattern=$;, [limit])

En fonction du délimiteur, mettez str Divise en sous-chaînes et renvoie un tableau de ces sous-chaînes.

Si motif est une chaîne, il sera utilisé comme séparateur lors de la division de str. Si pattern est un seul espace, str est divisé en fonction des espaces, et les espaces de début et les caractères d'espacement consécutifs sont ignorés.

Si motif est une expression régulière Regexp, str est divisé là où le motif correspond. Lorsque pattern correspond à une chaîne de longueur 1, str est divisé en caractères individuels.

Si le paramètre pattern est omis, la valeur de $; Si $; est nul (valeur par défaut), str est divisé sur les espaces, comme si ` ` était spécifié comme séparateur.

Si le paramètre limit est omis, les champs nuls de fin sont supprimés. Si limit est un nombre positif, un nombre maximum de champs est renvoyé (si limit est 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]*)
Créez une chaîne à partir du paramètre other_str en utilisant la procédure décrite pour String #count personnages de la série. Renvoie une nouvelle chaîne dans laquelle les occurrences de caractères identiques dans l'ensemble sont remplacées 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 changera et reviendra, renvoie nul s’il n’y a aucun changement.
59str.strip
Renvoie une copie de str avec les espaces de début et de fin supprimés.
60str.strip!
Supprimez les espaces de début et de fin de str et revenez s'il n'y a pas de changement nul.
61str.sub(motif, remplacement) [ou]
str.sub(motif) { |match| bloc }

Renvoie une copie de str. La première occurrence de pattern sera remplacée par la valeur de remplacement ou de bloc. pattern est généralement une expression régulière Regexp ; s’il s’agit d’une chaîne, aucun métacaractère d’expression régulière n’est interprété.
62str.sub!(modèle, remplacement) [ou]
str.sub!(modèle) { |match| block }

Effectuer le remplacement de String#sub et renvoyer str Si aucun remplacement n'est effectué, nil est renvoyé.
63str.succ [ou] str.next
Renvoie l'héritage de str.
64str.succ! [ou] str.next!
est équivalent à String#succ, mais str va changer et retour.
65str.sum(n=16)
Renvoie la somme de contrôle de n bits des caractères dans str, où n Est un paramètre Fixnum facultatif, la valeur par défaut est 16. Le résultat est simplement la somme des valeurs binaires de chaque caractère dans str, modulo 2n - 1. Ce n'est pas une somme de contrôle particulièrement bonne.
66str.swapcase
Renvoie une copie de str, avec toutes les lettres majuscules converties en lettres minuscules et toutes les lettres minuscules convertis sont des lettres majuscules.
67str.swapcase!
est équivalent à String#swapcase, mais str changera et reviendra, s'il n'y a pas change puis renvoie zéro.
68str.to_f
Renvoie le résultat de l'interprétation du caractère principal de str comme un nombre à virgule flottante. Les caractères supplémentaires au-delà de la fin d'un chiffre valide sont ignorés. S'il n'y a aucun chiffre valide au début de str, 0,0 est renvoyé. Cette méthode ne génère pas d'exception.
69str.to_i(base=10)
Renvoie le caractère principal de str interprété comme une base entière (la base est 2, 8, 10 ou 16). Les caractères supplémentaires au-delà de la fin d'un chiffre valide sont ignorés. S'il n'y a aucun chiffre valide au début de str, 0 est renvoyé. Cette méthode ne génère pas d'exception.
70str.to_s [ou] str.to_str
Renvoie la valeur reçue.
71str.tr(from_str, to_str)
Renvoie une copie de str, en remplaçant les caractères de from_str par les caractères correspondants de to_str. Si to_str est plus court que from_str, il est complété jusqu'au 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 répertoriés.
72str.tr!(from_str, to_str)
Équivalent à String#tr, mais str changera et reviendra, renvoie zéro s'il n'y a pas de changement.
73str.tr_s(from_str, to_str)
Traitez str selon les règles décrites par String#tr, puis move Sauf pour les caractères répétés qui affecteraient la traduction.
74str.tr_s!(from_str, to_str)
Équivalent à String#tr_s, mais str changera et reviendra, renvoie zéro s'il n'y a pas de changement.
75str.unpack(format)
Décoder str (peut contenir des données binaires) en fonction de la chaîne de format et renvoyer l'extrait d'un tableau de chaque valeur. Le caractère de format se compose d'une série d'instructions à un seul caractère. Chaque commande peut être suivie d'un nombre indiquant le nombre de fois où la commande est répétée. L'astérisque (*) utilisera tous les éléments restants. Les directives sSiIll, chacune éventuellement suivie d'un trait de soulignement (_), utilisent la taille native de la plateforme sous-jacente pour le type spécifié, sinon utilisent une taille cohérente indépendante de la plateforme. Les espaces 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 est insensible au contexte, seuls les caractères de a à z sont affectés.
77str.upcase !
Modifiez le contenu de str en majuscule ou renvoyez nil s'il n'y a aucun changement.
78str.upto(other_str) { |s| block }
Parcourir des valeurs continues, en commençant par str et en terminant par other_str End (inclus), en passant chaque valeur au bloc tour à tour. La méthode String#succ est utilisée pour générer chaque valeur.

Instructions de décompression de chaîne

Le tableau suivant répertorie les instructions de décompression pour la méthode String#unpack.

CommandeRetourDescription
AChaîne Supprimez les valeurs nulles et les espaces de fin.
uneChaîneChaîne.
BStringExtrait les bits de chaque caractère (le bit le plus significatif en premier).
bStringExtrait les bits de chaque caractère (le bit le moins significatif en premier).
CFixnumExtrait un caractère sous forme d'entier non signé.
cFixnumExtrait un caractère sous forme d'entier.
D, dFloat traite la taille des caractères de longueur (double) comme un double natif.
EFloatTraitement de la taille des caractères de longueur (double) comme un double dans l'ordre des octets littleendian.
eFloatTraitez la taille des caractères de longueur (float) comme un flottant dans l'ordre des octets littleendian.
F, fFloat traite la taille des caractères (float) comme des flotteurs natifs.
GFloatTraite la taille des caractères de longueur (double) comme double dans l'ordre des octets du réseau.
gFloatTraitement de la taille des caractères de longueur (float) comme flottant de l'ordre des octets du réseau.
HStringExtrait l'hexagone de chaque caractère (le bit le plus significatif en premier).
hStringExtrait l'hexagone de chaque caractère (bit le moins significatif en premier).
IIntegerTraite les caractères consécutifs de taille de (int) longueur (modifié par _) comme un entier natif.
iIntegerTraite les caractères consécutifs de sizeof(int) length (modifié par _) comme un entier natif signé.
LIntegerTraitez quatre caractères consécutifs (modifiés par _) comme un entier long natif non signé.
lIntegerTraitez quatre caractères consécutifs (modifiés par _) comme un entier long natif signé.
MStringCitation imprimable.
mStringEncodage Base64.
NInteger traite quatre caractères comme un long non signé dans l'ordre des octets du réseau.
nFixnumTraitez deux caractères comme un court non signé dans l'ordre des octets du réseau.
PString traite les caractères sizeof(char *) comme un pointeur et renvoie les caractères emph{len} à partir de la position référencée.
pString traite les caractères sizeof(char *) comme un pointeur vers un caractère terminé par un caractère nul.
QEntierTraitez huit caractères comme un mot quadruple non signé (64 bits).
qEntierTraitez huit caractères comme un mot quadruple signé (64 bits).
SFixnumTraitez deux caractères consécutifs (différents si _ est utilisé) comme un court non signé dans l'ordre natif des octets.
sFixnumTraitez deux caractères consécutifs (différents si _ est utilisé) comme un court signé dans l'ordre natif des octets.
UIntegerCaractère UTF-8 sous forme d'entier non signé.
uStringEncodage UU.
VFixnumTraitez quatre caractères comme un long non signé dans l'ordre des octets petit-boutiste.
vFixnumTraitez deux caractères comme un court non signé dans l'ordre des octets petit-boutiste.
wIntegerBER entier compressé.
X Sauter un caractère en arrière.
x Avancer d'un caractère.
ZString Utilisé avec *, supprime les valeurs nulles de fin jusqu'à la première valeur nulle.
@ Ignore le décalage donné par le paramètre de longueur.

Exemples

Essayez les exemples suivants pour décompresser diverses données.

"abc rrreeerrreeeabc rrreeerrreee".unpack('A6Z6')   #=> ["abc", "abc "]
"abc rrreeerrreee".unpack('a3a3')           #=> ["abc", " rrreee0rrreee0"]
"abc rrreeeabc rrreee".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"]