English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
Podemos usar #{} Uso de #{} para calcular o valor de expressões:
Inserção de variáveis em strings:
#!/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:
#!/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.
#!/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 "".
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 invertida | Caractere hexadecimal | Description |
---|---|---|
\a | 0x07 | Sinal de alarme |
\b | 0x08 | Tecla de backspace |
\cx | Control-x | |
\C-x | Control-x | |
\e | 0x1b | Caractere de escape |
\f | 0x0c | Caractere de nova página |
\M-\C-x | Meta-Control-x | |
\n | 0x0a | Caractere de nova linha |
\nnn | Representação octal, onde o valor de n varia de 0.7 | |
\r | 0x0d | Caractere de nova linha |
\s | 0x20 | Espaço em branco |
\t | 0x09 | Tabulação |
\v | 0x0b | Tabulação vertical |
\x | Caractere x | |
\xnn | Representação hexadecimal, onde o valor de n varia de 0.9、a.f ou A.F |
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ção | Description |
---|---|
a | ASCII (igual a nenhum). Isso é o padrão. |
e | EUC. |
Tratar quatro caracteres como long unsigned da ordem de bytes da rede. | Nenhum (igual a ASCII). |
u | UTF-8. |
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:
#!/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 ordem | Método & Descrição |
---|---|
1 | str % 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. |
2 | str * integer Retorne uma nova string que contém integer str. Em outras palavras, str é repetida integer vezes. |
3 | str + other_str Concatena other_str ao str. |
4 | str << 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. |
5 | str <=> 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. |
6 | str == obj Verifique a igualdade entre str e obj. Se obj não for uma string, retorne false, se str <=> obj, retorne true, retorne 0. |
7 | str =~ 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. |
8 | str[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. |
9 | str.capitalize Converta a string para letras maiúsculas. |
10 | str.capitalize! É semelhante ao capitalize, mas str muda e retorna. |
11 | str.casecmp Comparação de strings sem distinção entre maiúsculas e minúsculas. |
12 | str.center Centralize a string. |
13 | str.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. |
14 | str.chomp! É semelhante ao chomp, mas str muda e retorna. |
15 | str.chop Remove o último caractere de str. |
16 | str.chop! É o mesmo que chop, mas str é alterada e retornada. |
17 | str.concat(other_str) Concatena other_str ao str. |
18 | str.count(str, ...) Contar um ou mais conjuntos de caracteres. Se houver vários conjuntos de caracteres, contar a interseção desses conjuntos. |
19 | str.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 /. |
20 | str.delete(other_str, ...) Retorna uma cópia de str com todos os caracteres na interseção dos parâmetros removidos. |
21 | str.delete!(other_str, ...) É o mesmo que delete, mas str é alterada e retornada. |
22 | str.downcase Retorna uma cópia de str com todas as letras maiúsculas substituídas por minúsculas. |
23 | str.downcase! É o mesmo que downcase, mas str é alterada e retornada. |
24 | str.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. |
25 | str.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. |
26 | str.each_byte { |fixnum| block } Passa cada byte de str para o bloco, retornando cada byte na representação decimal. |
27 | str.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. |
28 | str.empty? Se str estiver vazio (ou seja, o comprimento for 0), retorna true. |
29 | str.eql?(other) Se dois strings tiverem o mesmo comprimento e conteúdo, eles são iguais. |
30 | str.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'). |
31 | str[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. |
32 | str[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!. |
33 | str.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. |
34 | str.hash Retorna um hash baseado no comprimento e conteúdo da string. |
35 | str.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. |
36 | str.include? other_str [ou] str.include? fixnum Se a str contém a string ou caractere fornecido, retorna true. |
37 | str.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. |
38 | str.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. |
39 | str.inspect Retorna a versão imprimível de str, com caracteres especiais escapados. |
40 | str.intern [ou] str.to_sym Retorna o símbolo correspondente a str, se não existir cria o símbolo. |
41 | str.length Retorna o comprimento de str. Compare com size. |
42 | str.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. |
43 | str.lstrip Retorna uma cópia de str, removendo os espaços em branco no início. |
44 | str.lstrip! Remove os espaços em branco no início de str, se não houver mudança retorna nil. |
45 | str.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. |
46 | str.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. |
47 | str.replace(other_str) Substitui o conteúdo de str pelo valor correspondente de other_str. |
48 | str.reverse Retorna uma nova string, a nova string é o inverso de str. |
49 | str.reverse! Inverte str, str mudará e retornará. |
50 | str.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. |
51 | str.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. |
52 | str.rstrip Return a copy of str with trailing spaces removed. |
53 | str.rstrip! Remove trailing spaces from str, and return nil if there is no change. |
54 | str.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. |
55 | str.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. |
56 | str.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. |
57 | str.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. |
58 | str.squeeze!([other_str]*) É o mesmo que squeeze, mas a str será modificada e retornada, retornando nil se não houver mudança. |
59 | str.strip Retorna uma cópia da str, removendo os espaços em branco no início e no final. |
60 | str.strip! Remove os espaços em branco no início e no final da str, retornando nil se não houver mudança. |
61 | str.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. |
62 | str.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. |
63 | str.succ [ou] str.next Retorna o herança de str. |
64 | str.succ! [ou] str.next! É equivalente a String#succ, mas str será alterada e retornada. |
65 | str.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. |
66 | str.swapcase Retorna uma cópia de str, convertendo todas as letras maiúsculas para minúsculas e todas as minúsculas para maiúsculas. |
67 | str.swapcase! É equivalente a String#swapcase, mas str será alterada e retornada, ou retornará nil se não houver alteração. |
68 | str.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. |
69 | str.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. |
70 | str.to_s [ou] str.to_str Retorna o valor recebido. |
71 | str.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. |
72 | str.tr!(from_str, to_str) É equivalente a String#tr, mas str será alterada e retornada, ou retornará nil se não houver alteração. |
73 | str.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. |
74 | str.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. |
75 | str.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. |
76 | str.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. |
77 | str.upcase! Change the content of str to uppercase, and return nil if no change is made. |
78 | str.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. |
The following table lists the unpacking commands of the String#unpack method.
Command | Return | Description |
---|---|---|
A | String | Remove trailing nulls and spaces. |
a | String | String. |
B | String | Extract bits from each character (starting with the most significant bit). |
b | String | Extract bits from each character (starting with the least significant bit). |
C | Fixnum | Extract a character as an unsigned integer. |
c | Fixnum | Extract a character as an integer. |
D, d | Float | Use characters of length sizeof(double) as native doubles. |
E | Float | Use characters of length sizeof(double) as littleendian byte order doubles. |
e | Float | Use characters of length sizeof(float) as littleendian byte order floats. |
F, f | Float | Use characters of length sizeof(float) as native floats. |
G | Float | Use characters of length sizeof(double) as doubles in network byte order. |
g | Float | Use characters of length sizeof(float) as floats in network byte order. |
H | String | 从每个字符中提取十六进制(首先是最高有效位)。 |
Extrair hexadecimal de cada caractere (primeiro o mais significativo). | String | h |
Extrair hexadecimal de cada caractere (primeiro o menos significativo). | Integer | I |
Tratar caracteres contíguos de tamanho sizeof(int) (modificados por _) como integer nativo. | Integer | i |
Tratar caracteres contíguos de tamanho sizeof(int) (modificados por _) como integer nativo signed. | Integer | L |
Tratar quatro (modificados por _) caracteres contíguos como long integer nativo unsigned. | Integer | l |
Tratar quatro (modificados por _) caracteres contíguos como long integer nativo signed. | String | M |
Referência imprimível. | String | m64 Base |
Codificação. | Integer | N |
Tratar quatro caracteres como long unsigned da ordem de bytes da rede. | Fixnum | n |
Tratar dois caracteres como short unsigned da ordem de bytes da rede. | String | Tratar sizeof(char *P |
) comprimento de caractere como ponteiro, e retornar \emph{len} caracteres a partir da posição de referência. | String | Tratar sizeof(char *) comprimento de caractere como um ponteiro de caractere terminado em zero. |
Q | Integer | Tratar oito caracteres como quad word unsigned.64 bits). |
q | Integer | Tratar oito caracteres como quad word signed.64 bits). |
S | Fixnum | Tratar dois (se usar _ então diferente) caracteres contíguos como short unsigned da ordem de bytes nativa. |
s | Fixnum | Tratar dois (se usar _ então diferente) caracteres contíguos como short signed da ordem de bytes nativa. |
U | Integer | UTF-8 Caractere, como inteiro unsigned. |
u | String | Codificação UU. |
V | Fixnum | Tratar quatro caracteres como little-Endianness de bytes unsigned long. |
v | Fixnum | Tratar dois caracteres como little-Endianness de bytes unsigned short. |
w | Integer | Inteiro comprimido BER. |
X | Pular um caractere para trás. | |
x | Pular um caractere para frente. | |
Z | String | E * Usar juntos, remover o null adicional até o primeiro null. |
@ | Pular a quantidade de offset especificada pelo parâmetro length. |
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"]