English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

String (String) Ruby

O objeto String no Ruby é usado para armazenar ou operar uma ou mais sequências de bytes.

As strings no Ruby são divididas em strings entre aspas simples (') e strings entre aspas duplas (") - a diferença é que as strings entre aspas duplas podem suportar mais caracteres de escape.

String entre aspas simples

A string mais simples é a string entre aspas simples, ou seja, a string armazenada dentro das aspas simples:

'This is a Ruby program's string'

Se precisar usar o caractere de aspa simples dentro de uma string de aspas simples, é necessário usar a barra invertida (\) dentro da string de aspas simples, para que o interpretador Ruby não considere esse caractere de aspa simples como o caractere de terminação da string:

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

A barra invertida também pode escapar outra barra invertida, dessa forma, a segunda barra invertida não será interpretada como caractere de escape.

Aqui estão as características relacionadas a strings no Ruby.

strings entre aspas duplas

Podemos usar #{} Uso de #{} para calcular o valor de expressões:

Inserção de variáveis em strings:

Exemplo Online

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
name1 = "Joe"
name2 = "Mary"
puts "Olá #{name1}, #{name2}

Os exemplos acima mostram o resultado da execução:

Olá Joe, onde está a Mary?

Operações matemáticas em strings:

Exemplo Online

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
x, y, z = 12, 36, 72
puts "O valor de x é #{ x "
puts "x + O valor de y é #{ x + O valor de y é "y"
puts "x + y + A média de z é #{ (x + y + z)/3 "}

Os exemplos acima mostram o resultado da execução:

O valor de x é 12
x + O valor de y é 48
x + y + A média de z é 40

Ruby também suporta uma variável de string que é liderada por %q e %Q, %q usa as regras de citação com aspas simples, enquanto %Q usa as regras de citação com aspas duplas, seguidas de um delimitador de início como (! [ { e um delimitador de fim como } ] ) etc.

Os caracteres que seguem q ou Q são delimitadores. Um delimitador pode ser qualquer caractere não alfanumérico de um byte. Por exemplo: [,{,(,<,! etc., a string continuará a ser lida até que seja encontrada a delimitador correspondente.

Exemplo Online

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
desc1 = %Q{Ruby pode usar '' e "".}
desc2 = %q|Ruby pode usar '' e "".|
 
puts desc1
puts desc2

Os exemplos acima mostram o resultado da execução:

As strings do Ruby podem usar '' e "".
As strings do Ruby podem usar '' e "".

Caracteres de escape

O índice lista os caracteres de escape ou caracteres não impressíveis que podem ser escapados com o símbolo de barra invertida.

Atenção:Em uma string entre aspas duplas, o caractere de escape será interpretado. Em uma string entre aspas simples, o caractere de escape não será interpretado e será exibido como é.

Símbolo de barra invertidaCaractere hexadecimalDescription
\a0x07Sinal de alarme
\b0x08Tecla de backspace
\cx Control-x
\C-x Control-x
\e0x1bCaractere de escape
\f0x0cCaractere de nova página
\M-\C-x Meta-Control-x
\n0x0aCaractere de nova linha
\nnn Representação octal, onde o valor de n varia de 0.7
\r0x0dCaractere de nova linha
\s0x20Espaço em branco
\t0x09Tabulação
\v0x0bTabulação vertical
\x Caractere x
\xnn Representação hexadecimal, onde o valor de n varia de 0.9、a.f ou A.F

Codificação de caracteres

Ruby usa o conjunto de caracteres ASCII por padrão, onde os caracteres podem ser representados por um único byte. Se você usar UTF-8 ou outros conjuntos de caracteres modernos, onde os caracteres podem ser representados por um a quatro bytes.

Você pode usar $KCODE no início do programa, conforme mostrado a seguir:

$KCODE = 'u'

Abaixo estão os valores possíveis de $KCODE.

CodificaçãoDescription
aASCII (igual a nenhum). Isso é o padrão.
eEUC.
Tratar quatro caracteres como long unsigned da ordem de bytes da rede.Nenhum (igual a ASCII).
uUTF-8.

Métodos internos de string

Precisamos de um exemplo de objeto String para chamar métodos String. Abaixo está a maneira de criar um exemplo de objeto String:

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

Isso retornará um contendo str Novo objeto de string de cópia. Agora, use str Objeto, podemos chamar qualquer método de exemplo disponível. Por exemplo:

Exemplo Online

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

Isso produzirá o seguinte resultado:

this is test

A seguir estão os métodos de string públicos (supondo que str seja um objeto String):

Número de ordemMétodo & Descrição
1str % arg
Formate a string usando o padrão de formatação. Se arg contiver uma substituição de mais de um, arg deve ser um array. Para obter mais informações sobre os padrões de formatação, consulte "Módulos do núcleo" sob sprintf.
2str * integer
Retorne uma nova string que contém integer str. Em outras palavras, str é repetida integer vezes.
3str + other_str
Concatena other_str ao str.
4str << obj
Conecte um objeto a uma string. Se o objeto for um intervalo de 0.255 Se entre fixnum e fixnum, ele será convertido em um caractere. Compare-o com concat.
5str <=> other_str
Compare str com other_str, retorne -1(menor)、0(igual)ou 1(maior)。A comparação é sensível a maiúsculas e minúsculas.
6str == obj
Verifique a igualdade entre str e obj. Se obj não for uma string, retorne false, se str <=> obj, retorne true, retorne 0.
7str =~ obj
Coincidência de str com o padrão regular obj. Retorne a posição de início da correspondência, caso contrário, retorne false.
8str[position] # O retorno é o código ASCII, não o caractere
str[start, length]
str[start..end]
str[start...end]

Recorte uma substrinde usando índice.
9str.capitalize
Converta a string para letras maiúsculas.
10str.capitalize!
É semelhante ao capitalize, mas str muda e retorna.
11str.casecmp
Comparação de strings sem distinção entre maiúsculas e minúsculas.
12str.center
Centralize a string.
13str.chomp
Remova o delimitador de registro da extremidade da string (/),geralmente \n. Se não houver delimitador de registro, não há nenhuma operação.
14str.chomp!
É semelhante ao chomp, mas str muda e retorna.
15str.chop
Remove o último caractere de str.
16str.chop!
É o mesmo que chop, mas str é alterada e retornada.
17str.concat(other_str)
Concatena other_str ao str.
18str.count(str, ...)
Contar um ou mais conjuntos de caracteres. Se houver vários conjuntos de caracteres, contar a interseção desses conjuntos.
19str.crypt(other_str)
Aplica um hash de criptografia unidirecional ao str. O parâmetro é uma string de dois caracteres, cada caractere no intervalo de a.z, A.Z, 0.9、 . Ou /.
20str.delete(other_str, ...)
Retorna uma cópia de str com todos os caracteres na interseção dos parâmetros removidos.
21str.delete!(other_str, ...)
É o mesmo que delete, mas str é alterada e retornada.
22str.downcase
Retorna uma cópia de str com todas as letras maiúsculas substituídas por minúsculas.
23str.downcase!
É o mesmo que downcase, mas str é alterada e retornada.
24str.dump
Retorna uma versão de str com todos os caracteres não impressíveis substituídos pelo símbolo \nnn e todos os caracteres especiais escapados.
25str.each(separator=$/) { |substr| block }
Usa um parâmetro como delimitador de registro (o padrão é $/Divide str por um delimitador, passando cada substring para o bloco fornecido.
26str.each_byte { |fixnum| block }
Passa cada byte de str para o bloco, retornando cada byte na representação decimal.
27str.each_line(separator=$/) { |substr| block }
Usa um parâmetro como delimitador de registro (o padrão é $/Divide str por um delimitador, passando cada substring para o bloco fornecido.
28str.empty?
Se str estiver vazio (ou seja, o comprimento for 0), retorna true.
29str.eql?(other)
Se dois strings tiverem o mesmo comprimento e conteúdo, eles são iguais.
30str.gsub(pattern, replacement) [ou]
str.gsub(pattern) { |match| block }

Retorna uma cópia de str com todas as ocorrências do padrão substituídas pelo valor de replacement ou block./\d/ Corresponde a um número, mas '\d' corresponde a um backslash seguido de 'd').
31str[número] [ou] str[número, número] [ou] str[intervalo] [ou] str[regexp] [ou] str[regexp, número] [ou] str[other_str]
Use os seguintes parâmetros para referenciar str: um parâmetro Fixnum retorna o código de caractere do Fixnum; dois Fixnum retornam uma substring de offset (primeiro Fixnum) até a comprimento (segundo Fixnum); um intervalo retorna uma substring dentro do intervalo; um regexp retorna a parte correspondente da string; um regexp com Fixnum retorna os dados correspondentes ao Fixnum da posição; um other_str retorna a substring correspondente a other_str. Um Fixnum negativo começa do final da string -1 Começa.
32str[número] = número [ou] str[número] = new_str [ou] str[número, número] = new_str [ou] str[intervalo] = umaString [ou] str[expressão] =new_str [ou] str[expressão, número] =new_str [ou] str[other_str] = new_str ]
Substitui toda a string ou parte da string. É sinônimo de slice!.
33str.gsub!(padrão, substituição) [ou] str.gsub!(padrão) { |encontrado| bloco }
Executa a substituição do String#gsub, retorna str, se nenhuma substituição for executada, retorna nil.
34str.hash
Retorna um hash baseado no comprimento e conteúdo da string.
35str.hex
Toma os caracteres iniciais da str como uma string de número hexadecimal (um símbolo opcional e um opcional 0x), e retorna o número correspondente. Se houver erro, retorna zero.
36str.include? other_str [ou] str.include? fixnum
Se a str contém a string ou caractere fornecido, retorna true.
37str.index(substring [, offset]) [ou]
str.index(fixnum [, offset]) [ou]
str.index(regexp [, offset])

Retorna o índice da primeira ocorrência do substring, caractere (fixnum) ou padrão (regexp) em str. Se não encontrar retorna nil. Se fornecer um segundo parâmetro, especifica a posição de início da pesquisa na string.
38str.insert(index, other_str)
Insere other_str antes do caractere na posição dada, modifica str. O índice negativo começa do final da string e insere após o caractere dado. A intenção é inserir uma string a partir da posição dada.
39str.inspect
Retorna a versão imprimível de str, com caracteres especiais escapados.
40str.intern [ou] str.to_sym
Retorna o símbolo correspondente a str, se não existir cria o símbolo.
41str.length
Retorna o comprimento de str. Compare com size.
42str.ljust(inteiro, padstr=' ')
Se o inteiro for maior que o comprimento de str, retorna uma nova string de comprimento inteiro, alinhada à esquerda com str e preenchida com padstr. Caso contrário, retorna str.
43str.lstrip
Retorna uma cópia de str, removendo os espaços em branco no início.
44str.lstrip!
Remove os espaços em branco no início de str, se não houver mudança retorna nil.
45str.match(pattern)
Se o pattern não for uma expressão regular, converte pattern em uma expressão regular Regexp e chama seu método de correspondência no str.
46str.oct
Toma o caractere inicial de str como uma string de número decimal (um símbolo opcional) e retorna o número correspondente. Se a conversão falhar, retorna 0.
47str.replace(other_str)
Substitui o conteúdo de str pelo valor correspondente de other_str.
48str.reverse
Retorna uma nova string, a nova string é o inverso de str.
49str.reverse!
Inverte str, str mudará e retornará.
50str.rindex(substring [, fixnum]) [ou]
str.rindex(fixnum [, fixnum]) [ou]
str.rindex(regexp [, fixnum])

Return the index of the last occurrence of the given substring, character (fixnum) or pattern (regexp) in str. If not found, return nil. If the second parameter is provided, specify the position in the string where the search ends. Characters beyond this point will not be considered.
51str.rjust(integer, padstr=' ')
If the integer is greater than the length of str, return a new string of length integer, right-aligned with str and padded with padstr. Otherwise, return str.
52str.rstrip
Return a copy of str with trailing spaces removed.
53str.rstrip!
Remove trailing spaces from str, and return nil if there is no change.
54str.scan(pattern) [or]
str.scan(pattern) { |match, ...| block }

Both forms match the pattern (which can be a Regexp or a String) to traverse str. For each match, a result is generated, which is added to the result array or passed to the block. If the pattern does not contain groups, each independent result consists of the matched string and $&. If the pattern contains groups, each independent result is an array containing each group entry.
55str.slice(fixnum) [or] str.slice(fixnum, fixnum) [or]
str.slice(range) [or] str.slice(regexp) [or]
str.slice(regexp, fixnum) [or] str.slice(other_str)
See str[fixnum], etc.
str.slice!(fixnum) [or] str.slice!(fixnum, fixnum) [or] str.slice!(range) [or] str.slice!(regexp) [or] str.slice!(other_str)

Remove a specified part from str and return the removed part. If the value is out of range, an IndexError will be generated if the parameter is in the form of Fixnum. A RangeError will be generated if the parameter is in the form of range. If the parameter is in the form of Regexp and String, the action will be ignored.
56str.split(pattern=$;, [limit])

Divida a str em substrings com base no delimitador e retorne um array desses substrings.

Se pattern é uma string String, então será usada como delimitador ao dividir a str. Se o pattern for um único espaço, a str será dividida com base no espaço, ignorando os espaços em branco no início e os caracteres de espaço contínuos.

Se pattern  É uma expressão regular Regexp, então a str será dividida onde o pattern coincide. Quando o pattern coincide com uma string de comprimento zero, a str será dividida em caracteres individuais.

Se o parâmetro for omitido pattern O valor, usará o valor de $; se $; for nil (o padrão), a str será dividida com base no espaço, como se fosse especificado ` ` como delimitador.

Se o parâmetro for omitido limit Parâmetro, suprimirá os campos nulos subsequentes. Se limit for um número positivo, retornará no máximo o número de campos especificados (se limit for 1Se limit for um número negativo, o número de campos retornados não será limitado e os campos nulos subsequentes não serão suprimidos.

57str.squeeze([other_str]*)
Usa o programa descrito em String#count para construir uma série de caracteres a partir do parâmetro other_str. Retorna uma nova string onde os caracteres repetidos na coleção serão substituídos por um único caractere. Se não for fornecido parâmetro, todos os caracteres repetidos serão substituídos por um único caractere.
58str.squeeze!([other_str]*)
É o mesmo que squeeze, mas a str será modificada e retornada, retornando nil se não houver mudança.
59str.strip
Retorna uma cópia da str, removendo os espaços em branco no início e no final.
60str.strip!
Remove os espaços em branco no início e no final da str, retornando nil se não houver mudança.
61str.sub(pattern, replacement) [ou]
str.sub(pattern) { |match| block }

Retorna uma cópia da str, onde a primeira ocorrência do pattern será substituída pelo valor de replacement ou block. O pattern geralmente é uma expressão regular Regexp; se for uma string String, nenhum caractere de caractere especial da expressão regular será interpretado.
62str.sub!(pattern, replacement) [ou]
str.sub!(padrão) { |match| bloco }

Executa String#sub substituição e retorna str, ou retorna nil se não houver substituição.
63str.succ [ou] str.next
Retorna o herança de str.
64str.succ! [ou] str.next!
É equivalente a String#succ, mas str será alterada e retornada.
65str.sum(n=16)
Retorna o n-soma de bits de verificação, onde n é um parâmetro Fixnum opcional, com valor padrão de 16O resultado é simplesmente a soma dos valores binários de cada caractere em str, com 2Tratar quatro caracteres como long unsigned da ordem de bytes da rede. - 1 Para módulo. Isso não é um bom código de verificação.
66str.swapcase
Retorna uma cópia de str, convertendo todas as letras maiúsculas para minúsculas e todas as minúsculas para maiúsculas.
67str.swapcase!
É equivalente a String#swapcase, mas str será alterada e retornada, ou retornará nil se não houver alteração.
68str.to_f
Retorna o resultado da interpretação dos caracteres iniciais de str como número flutuante. Os caracteres adicionais no final do número válido serão ignorados. Se não houver número válido no início de str, retornará 0.0. Este método não gerará exceções.
69str.to_i(base=10)
Retorna a interpretação dos caracteres iniciais de str como base (base) 2E 8E 10 Ou 16O resultado. Os caracteres adicionais no final do número válido serão ignorados. Se não houver número válido no início de str, retornará 0. Este método não gerará exceções.
70str.to_s [ou] str.to_str
Retorna o valor recebido.
71str.tr(from_str, to_str)
Retorna uma cópia de str, substituindo os caracteres de from_str pelos caracteres correspondentes em to_str. Se to_str for mais curto, ele será preenchido com o último caractere. Ambos os strings podem usar c1.c2 Símbolo que representa o intervalo de caracteres. Se from_str começar com ^, significa todos os caracteres exceto os listados.
72str.tr!(from_str, to_str)
É equivalente a String#tr, mas str será alterada e retornada, ou retornará nil se não houver alteração.
73str.tr_s(from_str, to_str)
Tratar str conforme as regras descritas em String#tr e, em seguida, remover caracteres repetidos que possam afetar a tradução.
74str.tr_s!(from_str, to_str)
Is equivalent to String#tr_s, but str will change and return, or return nil if no change is made.
75str.unpack(format)
Decode str (which may contain binary data) according to the format string, and return an array of each extracted value. The format character consists of a series of single-character instructions. A number may follow each instruction to indicate the number of times the instruction is repeated. The asterisk (*)*The space in the format string will be ignored. The format string uses all remaining elements. The command sSiIlL may be followed by an underscore (_) each time, to use the local size of the underlying platform for the specified type, otherwise, use a consistent size independent of the platform.
76str.upcase
Return a copy of str with all lowercase letters replaced with uppercase letters. The operation is case-insensitive, and only characters a to z are affected.
77str.upcase!
Change the content of str to uppercase, and return nil if no change is made.
78str.upto(other_str) { |s| block }
Iterate over consecutive values, starting with str, ending with other_str (inclusive), and pass each value alternately to block. The String#succ method is used to generate each value.

String unpack command

The following table lists the unpacking commands of the String#unpack method.

CommandReturnDescription
AStringRemove trailing nulls and spaces.
aStringString.
BStringExtract bits from each character (starting with the most significant bit).
bStringExtract bits from each character (starting with the least significant bit).
CFixnumExtract a character as an unsigned integer.
cFixnumExtract a character as an integer.
D, dFloatUse characters of length sizeof(double) as native doubles.
EFloatUse characters of length sizeof(double) as littleendian byte order doubles.
eFloatUse characters of length sizeof(float) as littleendian byte order floats.
F, fFloatUse characters of length sizeof(float) as native floats.
GFloatUse characters of length sizeof(double) as doubles in network byte order.
gFloatUse characters of length sizeof(float) as floats in network byte order.
HString从每个字符中提取十六进制(首先是最高有效位)。
Extrair hexadecimal de cada caractere (primeiro o mais significativo).Stringh
Extrair hexadecimal de cada caractere (primeiro o menos significativo).IntegerI
Tratar caracteres contíguos de tamanho sizeof(int) (modificados por _) como integer nativo.Integeri
Tratar caracteres contíguos de tamanho sizeof(int) (modificados por _) como integer nativo signed.IntegerL
Tratar quatro (modificados por _) caracteres contíguos como long integer nativo unsigned.Integerl
Tratar quatro (modificados por _) caracteres contíguos como long integer nativo signed.StringM
Referência imprimível.Stringm64 Base
Codificação.IntegerN
Tratar quatro caracteres como long unsigned da ordem de bytes da rede.Fixnumn
Tratar dois caracteres como short unsigned da ordem de bytes da rede.StringTratar sizeof(char *P
) comprimento de caractere como ponteiro, e retornar \emph{len} caracteres a partir da posição de referência.StringTratar sizeof(char *) comprimento de caractere como um ponteiro de caractere terminado em zero.
QIntegerTratar oito caracteres como quad word unsigned.64 bits).
qIntegerTratar oito caracteres como quad word signed.64 bits).
SFixnumTratar dois (se usar _ então diferente) caracteres contíguos como short unsigned da ordem de bytes nativa.
sFixnumTratar dois (se usar _ então diferente) caracteres contíguos como short signed da ordem de bytes nativa.
UIntegerUTF-8 Caractere, como inteiro unsigned.
uStringCodificação UU.
VFixnumTratar quatro caracteres como little-Endianness de bytes unsigned long.
vFixnumTratar dois caracteres como little-Endianness de bytes unsigned short.
wIntegerInteiro comprimido BER.
X Pular um caractere para trás.
x Pular um caractere para frente.
ZStringE * Usar juntos, remover o null adicional até o primeiro null.
@ Pular a quantidade de offset especificada pelo parâmetro length.

Exemplo Online

Tente o exemplo a seguir, descomprimir vários dados.

"abc \0\0abc \0\0".unpack('A6Z6#=> ["abc", "abc "]
"abc \0\0".unpack('a3a3#=> ["abc", " \000\000"]
"abc \0abc \0".unpack('Z')*Z*
"aa".unpack('b')8B810000110", "01100001"]
"aaa".unpack('h')2H2c') #=> ["16", "61", 97]
"\xfe\xff\xfe\xff".unpack('sS') #=> [-2, 65534]
"now="20is".unpack('M')*
"whole".unpack('xax') #=> ["now is"]2aX2aX1aX2a') #=> ["h", "e", "l", "l", "o"]