Ruby Language
Zeichenketten
Suche…
Syntax
- 'Ein String' // erstellt einen String über ein Literal mit einfachen Anführungszeichen
- "Eine Zeichenfolge" // erstellt eine Zeichenfolge mit einem doppelten Anführungszeichen
- String.new ("A string")
- % q (Eine Zeichenfolge) // alternative Syntax zum Erstellen von Zeichenfolgen in Anführungszeichen
- % Q (Eine Zeichenfolge) // alternative Syntax zum Erstellen von doppelten Anführungszeichen
Unterschied zwischen einfachen und doppelten String-Literalen
Der Hauptunterschied besteht darin, dass doppelte String
Literale String-Interpolationen und den gesamten Satz von Escape-Sequenzen unterstützen.
Zum Beispiel können sie beliebige interaktive Ruby-Ausdrücke enthalten:
# Single-quoted strings don't support interpolation
puts 'Now is #{Time.now}'
# Now is #{Time.now}
# Double-quoted strings support interpolation
puts "Now is #{Time.now}"
# Now is 2016-07-21 12:43:04 +0200
Strings in doppelten Anführungszeichen unterstützen auch den gesamten Satz von Escape-Sequenzen, einschließlich "\n"
, "\t"
...
puts 'Hello\nWorld'
# Hello\nWorld
puts "Hello\nWorld"
# Hello
# World
... während Single-Strings in Anführungszeichen unterstützen keine Escape - Sequenzen, notwendig , um die minimale Menge entblößte für Single-Strings in Anführungszeichen nützlich zu sein: Wörtliche Apostrophe und Schrägstriche, '\''
und '\\'
sind.
Zeichenfolge erstellen
Ruby bietet mehrere Möglichkeiten zum Erstellen eines String
Objekts. Die gebräuchlichste Methode ist die Verwendung von einfachen oder doppelten Anführungszeichen, um ein " String-Literal " zu erstellen:
s1 = 'Hello'
s2 = "Hello"
Der Hauptunterschied besteht darin, dass doppelt zitierte String-Literale etwas flexibler sind, da sie Interpolation und einige Escape-Sequenzen mit umgekehrter Schrägstrich unterstützen.
Es gibt auch mehrere andere Möglichkeiten, ein String-Literal mit beliebigen String-Trennzeichen zu erstellen. Ein beliebiges Zeichenfolge-Trennzeichen ist ein %
gefolgt von einem passenden Paar von Trennzeichen:
%(A string)
%{A string}
%<A string>
%|A string|
%!A string!
Schließlich können Sie die Sequenz %q
und %Q
verwenden, die äquivalent zu '
und "
" sind:
puts %q(A string)
# A string
puts %q(Now is #{Time.now})
# Now is #{Time.now}
puts %Q(A string)
# A string
puts %Q(Now is #{Time.now})
# Now is 2016-07-21 12:47:45 +0200
%q
und %Q
Sequenzen sind nützlich, wenn die Zeichenfolge entweder einfache oder doppelte Anführungszeichen oder eine Mischung aus beiden enthält. Auf diese Weise müssen Sie den Inhalt nicht entgehen lassen:
%Q(<a href="/profile">User's profile<a>)
Sie können mehrere verschiedene Trennzeichen verwenden, sofern ein übereinstimmendes Paar vorhanden ist:
%q(A string)
%q{A string}
%q<A string>
%q|A string|
%q!A string!
String-Verkettung
Verketten Sie Zeichenfolgen mit dem Operator +
:
s1 = "Hello"
s2 = " "
s3 = "World"
puts s1 + s2 + s3
# => Hello World
s = s1 + s2 + s3
puts s
# => Hello World
Oder mit dem <<
Operator:
s = 'Hello'
s << ' '
s << 'World'
puts s
# => Hello World
Beachten Sie, dass der Operator <<
das Objekt auf der linken Seite ändert.
Sie können auch Strings multiplizieren, z
"wow" * 3
# => "wowwowwow"
String-Interpolation
Die doppelte Anführungszeichen "
und %Q
unterstützen die String-Interpolation mit #{ruby_expression}
puts "Now is #{Time.now}"
# Now is Now is 2016-07-21 12:47:45 +0200
puts %Q(Now is #{Time.now})
# Now is Now is 2016-07-21 12:47:45 +0200
Fallmanipulation
"string".upcase # => "STRING"
"STRING".downcase # => "string"
"String".swapcase # => "sTRING"
"string".capitalize # => "String"
Diese vier Methoden ändern den ursprünglichen Empfänger nicht. Zum Beispiel,
str = "Hello"
str.upcase # => "HELLO"
puts str # => "Hello"
Es gibt vier ähnliche Methoden, die dieselben Aktionen ausführen, jedoch den ursprünglichen Empfänger ändern.
"string".upcase! # => "STRING"
"STRING".downcase! # => "string"
"String".swapcase! # => "sTRING"
"string".capitalize! # => "String"
Zum Beispiel,
str = "Hello"
str.upcase! # => "HELLO"
puts str # => "HELLO"
Anmerkungen:
- vor Ruby 2.4 verarbeiten diese Methoden keinen Unicode.
Einen String teilen
String#split
teilt einen String
in ein Array
, basierend auf einem Trennzeichen.
"alpha,beta".split(",")
# => ["alpha", "beta"]
Ein leerer String
ergibt ein leeres Array
:
"".split(",")
# => []
Ein nicht übereinstimmendes Trennzeichen führt zu einem Array
das ein einzelnes Element enthält:
"alpha,beta".split(".")
# => ["alpha,beta"]
Sie können einen String auch mit regulären Ausdrücken aufteilen:
"alpha, beta,gamma".split(/, ?/)
# => ["alpha", "beta", "gamma"]
Das Trennzeichen ist optional. Standardmäßig wird eine Zeichenfolge im Leerzeichen aufgeteilt:
"alpha beta".split
# => ["alpha", "beta"]
Strings verbinden
Array#join
verbindet ein Array
mit einem String
, basierend auf einem Trennzeichen:
["alpha", "beta"].join(",")
# => "alpha,beta"
Das Trennzeichen ist optional und wird standardmäßig mit einem leeren String
.
["alpha", "beta"].join
# => "alphabeta"
Ein leeres Array
führt zu einem leeren String
, unabhängig davon, welches Trennzeichen verwendet wird.
[].join(",")
# => ""
Mehrzeilige Saiten
Die einfachste Methode zum Erstellen einer mehrzeiligen Zeichenfolge besteht darin, einfach mehrere Zeilen zwischen Anführungszeichen zu verwenden:
address = "Four score and seven years ago our fathers brought forth on this
continent, a new nation, conceived in Liberty, and dedicated to the
proposition that all men are created equal."
Das Hauptproblem bei dieser Technik besteht darin, dass, wenn die Zeichenfolge ein Zitat enthält, die Zeichenfolgensyntax gebrochen wird. Um das Problem zu umgehen , können Sie stattdessen ein Heredoc verwenden:
puts <<-RAVEN
Once upon a midnight dreary, while I pondered, weak and weary,
Over many a quaint and curious volume of forgotten lore—
While I nodded, nearly napping, suddenly there came a tapping,
As of some one gently rapping, rapping at my chamber door.
"'Tis some visitor," I muttered, "tapping at my chamber door—
Only this and nothing more."
RAVEN
Ruby unterstützt hier Dokumente im Shell-Stil mit <<EOT
, der abschließende Text muss jedoch die Zeile beginnen. Das verschlechtert die Codeeinrückung. Es gibt also keinen Grund, diesen Stil zu verwenden. Leider hat der String Einrückungen, abhängig davon, wie der Code selbst eingerückt ist.
Ruby 2.3 löst das Problem durch die Einführung von <<~
das überschüssige führende Leerzeichen entfernt:
def build_email(address)
return (<<~EMAIL)
TO: #{address}
To Whom It May Concern:
Please stop playing the bagpipes at sunrise!
Regards,
Your neighbor
EMAIL
end
Percent Strings können auch mehrzeilige Strings erstellen:
%q(
HAMLET Do you see yonder cloud that's almost in shape of a camel?
POLONIUS By the mass, and 'tis like a camel, indeed.
HAMLET Methinks it is like a weasel.
POLONIUS It is backed like a weasel.
HAMLET Or like a whale?
POLONIUS Very like a whale
)
Es gibt einige Möglichkeiten, Interpolations- und Escape-Sequenzen zu vermeiden:
Anführungszeichen anstelle von Anführungszeichen:
'\n is a carriage return.'
Kleinbuchstabe
q
in einer Prozentzeichenfolge:%q[#{not-a-variable}]
Zitieren Sie die Terminal-Zeichenfolge in einem Heredoc:
<<-'CODE' puts 'Hello world!' CODE
Formatierte Zeichenfolgen
Ruby kann ein Array von Werten in einen String einfügen, indem beliebige Platzhalter durch die Werte des angegebenen Arrays ersetzt werden.
"Hello %s, my name is %s!" % ['World', 'br3nt']
# => Hello World, my name is br3nt!
Die Platzhalter werden durch zwei %s
und die Werte werden vom Array ['Hello', 'br3nt']
. Der Operator %
weist die Zeichenfolge an, die Werte des Arrays einzugeben.
Zeichenfolgen ersetzen
Die tr
Methode gibt eine Kopie einer Zeichenfolge zurück, bei der die Zeichen des ersten Arguments durch die Zeichen des zweiten Arguments ersetzt werden.
"string".tr('r', 'l') # => "stling"
Um nur das erste Vorkommen eines Musters durch einen anderen Ausdruck zu ersetzen, verwenden Sie die sub
"string ring".sub('r', 'l') # => "stling ring"
Wenn Sie alle Vorkommen eines Musters durch diesen Ausdruck ersetzen möchten, verwenden Sie gsub
"string ring".gsub('r','l') # => "stling ling"
Um Zeichen zu löschen, übergeben Sie eine leere Zeichenfolge für den zweiten Parameter
In all diesen Methoden können Sie auch reguläre Ausdrücke verwenden.
Beachten Sie, dass diese Methoden nur eine neue Kopie einer Zeichenfolge zurückgeben und die Zeichenfolge nicht ändern. Dazu müssen Sie die tr!
sub!
und gsub!
jeweils Methoden.
Die Daten in einer Zeichenfolge verstehen
In Ruby ist eine Zeichenfolge nur eine Folge von Bytes zusammen mit dem Namen einer Codierung (wie UTF-8
, US-ASCII
, ASCII-8BIT
), die angibt, wie Sie diese Bytes als Zeichen interpretieren können.
Ruby-Zeichenketten können zum Speichern von Text verwendet werden (im Wesentlichen eine Folge von Zeichen). In diesem Fall wird normalerweise die UTF-8-Kodierung verwendet.
"abc".bytes # => [97, 98, 99]
"abc".encoding.name # => "UTF-8"
Ruby-Zeichenfolgen können auch zum Speichern von binären Daten (einer Folge von Bytes) verwendet werden. In diesem Fall wird normalerweise die ASCII-8BIT-Kodierung verwendet.
[42].pack("i").encoding # => "ASCII-8BIT"
Es ist möglich, dass die Folge von Bytes in einer Zeichenfolge nicht mit der Kodierung übereinstimmt, was zu Fehlern führt, wenn Sie versuchen, die Zeichenfolge zu verwenden.
"\xFF \xFF".valid_encoding? # => false
"\xFF \xFF".split(' ') # ArgumentError: invalid byte sequence in UTF-8
String-Ersetzung
p "This is %s" % "foo"
# => "This is foo"
p "%s %s %s" % ["foo", "bar", "baz"]
# => "foo bar baz"
p "%{foo} == %{foo}" % {:foo => "foo" }
# => "foo == foo"
Weitere Informationen finden Sie unter String %
docs und Kernel :: sprintf .
String beginnt mit
Um herauszufinden, ob eine Zeichenfolge mit einem Muster beginnt, ist start_with?
Methode ist praktisch
str = "zebras are cool"
str.start_with?("zebras") => true
Sie können die Position des Musters auch mit index
überprüfen
str = "zebras are cool"
str.index("zebras").zero? => true
String endet mit
Wenn ein String mit einem Muster endet, wird das end_with?
Methode ist praktisch
str = "I like pineapples"
str.end_with?("pineaaples") => false
Saiten positionieren
In Ruby können Zeichenfolgen linksbündig, rechtsbündig oder zentriert sein
Verwenden Sie die Methode ljust
, um die ljust
nach links zu ljust
. Dabei werden zwei Parameter benötigt, eine Ganzzahl, die die Anzahl der Zeichen der neuen Zeichenfolge darstellt, und eine Zeichenfolge, die das zu füllende Muster darstellt.
Wenn die Ganzzahl größer als die Länge der ursprünglichen Zeichenfolge ist, wird die neue Zeichenfolge mit dem optionalen Zeichenfolgenparameter linksbündig gemacht, wobei der verbleibende Platz beansprucht wird. Wenn der String-Parameter nicht angegeben ist, wird der String mit Leerzeichen aufgefüllt.
str ="abcd"
str.ljust(4) => "abcd"
str.ljust(10) => "abcd "
Verwenden Sie die Methode rjust
um eine Zeichenfolge mit der rjust
. Dabei werden zwei Parameter benötigt, eine Ganzzahl, die die Anzahl der Zeichen der neuen Zeichenfolge darstellt, und eine Zeichenfolge, die das zu füllende Muster darstellt.
Wenn die Ganzzahl größer als die Länge der ursprünglichen Zeichenfolge ist, wird die neue Zeichenfolge mit dem optionalen Zeichenfolgenparameter rechtsbündig gemacht, wobei der verbleibende Platz beansprucht wird. Wenn der String-Parameter nicht angegeben ist, wird der String mit Leerzeichen aufgefüllt.
str = "abcd"
str.rjust(4) => "abcd"
str.rjust(10) => " abcd"
Verwenden Sie die center
Methode, um eine Zeichenfolge zu zentrieren. Dazu werden zwei Parameter benötigt, eine Ganzzahl, die die Breite der neuen Zeichenfolge darstellt, und eine Zeichenfolge, mit der die ursprüngliche Zeichenfolge aufgefüllt wird. Die Zeichenfolge wird zur Mitte ausgerichtet.
str = "abcd"
str.center(4) => "abcd"
str.center(10) => " abcd "