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:

2.3
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   "


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow