수색…


통사론

  • 'A string'// 작은 따옴표로 묶인 리터럴을 통해 문자열을 만듭니다.
  • "문자열"// 큰 따옴표로 묶인 리터럴을 통해 문자열을 만듭니다.
  • String.new ( "문자열")
  • % q (A 문자열) // 작은 따옴표로 묶인 문자열을 만들기위한 대체 구문
  • % Q (A string) // 큰 따옴표로 묶인 문자열을 만들기위한 대체 구문

작은 따옴표와 큰 따옴표로 묶인 문자열 리터럴의 차이점

가장 큰 차이점은 큰 따옴표로 묶인 String 리터럴이 문자열 보간과 전체 이스케이프 시퀀스 집합을 지원한다는 것입니다.

예를 들어 보간을 통한 임의의 루비 표현을 포함 할 수 있습니다.

# 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

큰 따옴표로 묶은 문자열은 "\n" , "\t" ...을 포함한 전체 이스케이프 시퀀스 를 지원합니다.

puts 'Hello\nWorld'
# Hello\nWorld

puts "Hello\nWorld"
# Hello
# World

... 작은 따옴표로 묶은 문자열은 이스케이프 시퀀스를 지원 하지 않고 작은 따옴표로 묶인 문자열을 유용하게 사용할 수 있도록 최소 세트를 사용합니다. 리터럴 작은 따옴표와 백 슬래시는 각각 '\'''\\' 입니다.

문자열 만들기

Ruby는 여러 가지 방법으로 String 객체를 생성한다. 가장 일반적인 방법은 작은 따옴표 나 큰 따옴표를 사용하여 " 문자열 리터럴 "을 만드는 것입니다.

s1 = 'Hello'
s2 = "Hello"

가장 큰 차이점은 큰 따옴표로 묶인 문자열 리터럴은 보간과 일부 백 슬래시 이스케이프 시퀀스를 지원하므로 좀 더 유연하다는 것입니다.

임의의 문자열 구분 기호를 사용하여 문자열 리터럴을 만드는 방법에는 여러 가지가 있습니다. 임의의 문자열 구분 기호는 % 다음에 일치하는 구분 기호 쌍을 붙입니다.

%(A string)
%{A string}
%<A string>
%|A string|
%!A string!

마지막으로 ' and " 와 동등한 %q%Q 시퀀스를 사용할 수 있습니다.

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%Q 시퀀스는 문자열에 작은 따옴표, 큰 따옴표 또는 두 가지가 혼합되어있을 때 유용합니다. 이런 식으로 콘텐츠를 벗어날 필요가 없습니다.

%Q(<a href="/profile">User's profile<a>)

일치하는 쌍이있는 한 여러 개의 다른 구분 기호를 사용할 수 있습니다.

%q(A string)
%q{A string}
%q<A string>
%q|A string|
%q!A string!

문자열 연결

문자열을 + 연산자와 연결 :

s1 = "Hello"
s2 = " "
s3 = "World"

puts s1 + s2 + s3
# => Hello World

s = s1 + s2 + s3
puts s
# => Hello World

또는 << 연산자로 :

s = 'Hello'
s << ' '
s << 'World'
puts s
# => Hello World

<< 연산자는 왼쪽에있는 개체를 수정합니다.

문자열을 곱할 수도 있습니다.

"wow" * 3
# => "wowwowwow"

문자열 보간법

큰 따옴표 구분 기호 "%Q 시퀀스는 #{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

사례 조작

"string".upcase     # => "STRING"
"STRING".downcase   # => "string"
"String".swapcase   # => "sTRING"
"string".capitalize # => "String"

이 네 가지 방법은 원래 수신기를 수정하지 않습니다. 예를 들어,

str = "Hello"
str.upcase # => "HELLO"
puts str   # => "Hello"

동일한 작업을 수행하지만 원본 수신기를 수정하는 네 가지 유사한 방법이 있습니다.

"string".upcase!     # => "STRING"
"STRING".downcase!   # => "string"
"String".swapcase!   # => "sTRING"
"string".capitalize! # => "String"

예를 들어,

str = "Hello"
str.upcase!  # => "HELLO"
puts str     # => "HELLO"

노트:

  • Ruby 2.4 이전에는 이러한 메소드가 유니 코드를 처리하지 않았습니다.

문자열 분할하기

String#split 은 구분 기호에 따라 StringArray 로 분할합니다.

"alpha,beta".split(",")
# => ["alpha", "beta"]

빈 상태 (empty)의 String 가 빈 상태 (empty)의 Array .

"".split(",")
# => []

일치하지 않는 구분 기호로 인해 단일 항목을 포함하는 Array 이 생성됩니다.

"alpha,beta".split(".")
# => ["alpha,beta"]

정규식을 사용하여 문자열을 분할 할 수도 있습니다.

"alpha, beta,gamma".split(/, ?/)
# => ["alpha", "beta", "gamma"]

구분 기호는 선택 사항이며 기본적으로 문자열은 공백으로 분리됩니다.

"alpha beta".split
# => ["alpha", "beta"] 

문자열 조인

Array#join 은 구분자에 따라 ArrayString 으로 조인합니다.

["alpha", "beta"].join(",")
# => "alpha,beta"

구분 기호는 선택 사항이며 기본값은 빈 String 입니다.

["alpha", "beta"].join
# => "alphabeta"

Array 은 어떤 구분 기호가 사용 되든 상관없이 빈 String 합니다.

[].join(",")
# => ""

여러 줄

여러 줄을 만드는 가장 쉬운 방법은 따옴표 사이에 여러 줄을 사용하는 것입니다.

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

이 기술의 가장 큰 문제점은 문자열에 인용 부호가 포함되어 있으면 문자열 구문이 손상된다는 것입니다. 이 문제를 해결하기 위해 heredoc을 대신 사용할 수 있습니다 :

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는 <<EOT 하여 쉘 스타일 문서를 지원하지만, 종료 텍스트는 반드시 줄을 시작해야합니다. 이는 코드 들여 쓰기를 엉망으로 만들었으므로 그 스타일을 사용할 이유가별로 없습니다. 유감스럽게도 코드 자체가 들여 쓰여지는 방식에 따라 문자열에 들여 쓰기가 있습니다.

Ruby 2.3은 초과 선행 공백을 제거하는 <<~ 을 도입하여 문제를 해결합니다.

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

백분율 문자열 은 여러 줄 문자열 을 만드는 데에도 사용됩니다.

%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
)

보간 및 이스케이프 시퀀스를 피할 수있는 몇 가지 방법이 있습니다.

  • 큰 따옴표 대신 작은 따옴표 : '\n is a carriage return.'

  • 백분율 문자열의 소문자 q : %q[#{not-a-variable}]

  • heredoc에서 터미널 문자열을 단일 인용 부호로 묶습니다.

    <<-'CODE'
       puts 'Hello world!'
    CODE
    

형식화 된 문자열

루비는 제공된 배열의 값으로 임의의 자리 표시자를 대체하여 문자열에 값 배열을 삽입 할 수 있습니다.

"Hello %s, my name is %s!" % ['World', 'br3nt']
# => Hello World, my name is br3nt!

place holder는 2 %s 로 표현되고 값은 배열 ['Hello', 'br3nt'] 에 의해 제공됩니다. % 연산자는 문자열 값에 배열 값을 주입하도록 지시합니다.

문자열 문자 대체

tr 메소드는 첫 번째 인수의 문자가 두 번째 인수의 문자로 대체되는 문자열의 복사본을 반환합니다.

"string".tr('r', 'l') # => "stling"

패턴의 첫 번째 어커런스 만 다른 표현식으로 바꾸려면 sub 메서드를 사용합니다.

"string ring".sub('r', 'l') # => "stling ring"

패턴의 모든 어커런스를 해당 표현식으로 바꾸려면 gsub 사용하십시오.

"string ring".gsub('r','l') # => "stling ling" 

문자를 삭제하려면 두 번째 매개 변수에 빈 문자열을 전달하십시오.

이러한 모든 방법에서 정규 표현식을 사용할 수도 있습니다.

이러한 메서드는 문자열의 새 복사본 만 반환하며 해당 문자열을 수정하지 않는다는 점에 유의해야합니다. 그렇게하려면 tr! 을 사용해야합니다 tr! , sub! 그리고 gsub! 방법.

문자열의 데이터 이해

루비에서는 문자열의 단지 순서입니다 바이트 인코딩의 이름과 함께 (예 : UTF-8 , US-ASCII , ASCII-8BIT ) 그건 당신이 문자로 그 바이트를 해석하는 방법을 지정합니다.

루비 문자열은 텍스트 (기본적으로 일련의 문자)를 저장하는 데 사용할 수 있습니다.이 경우 대개 UTF-8 인코딩이 사용됩니다.

"abc".bytes  # => [97, 98, 99]
"abc".encoding.name  # => "UTF-8"

루비 문자열은 바이너리 데이터 (바이트 순서)를 저장하는 데 사용될 수도 있습니다.이 경우 ASCII-8BIT 인코딩이 일반적으로 사용됩니다.

[42].pack("i").encoding  # => "ASCII-8BIT"

문자열의 바이트 시퀀스가 ​​인코딩과 일치하지 않아서 문자열을 사용하려고하면 오류가 발생할 수 있습니다.

"\xFF \xFF".valid_encoding? # => false
"\xFF \xFF".split(' ')      # ArgumentError: invalid byte sequence in UTF-8

문자열 대체

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"

자세한 내용은 String % docs 및 Kernel :: sprintf 를 참조하십시오.

문자열은 다음으로 시작합니다.

문자열이 패턴으로 시작하는지 확인하려면 start_with? 방법이 편리해진다.

str = "zebras are cool"
str.start_with?("zebras")      => true

또한 index 를 사용하여 패턴의 위치를 ​​확인할 수 있습니다.

str = "zebras are cool"
str.index("zebras").zero?      => true

문자열은로 끝납니다.

문자열이 패턴으로 끝나는 지 확인하려면 end_with? 방법이 편리해진다.

str = "I like pineapples"
str.end_with?("pineaaples")      => false

문자열 위치 지정

Ruby에서 문자열은 왼쪽 정렬, 오른쪽 정렬 또는 가운데 정렬 될 수 있습니다.

문자열을 왼쪽 정렬하려면 ljust 메서드를 사용합니다. 여기에는 새로운 문자열의 문자 수를 나타내는 정수와 채울 패턴을 나타내는 문자열이라는 두 개의 매개 변수가 사용됩니다.

정수가 원래 문자열의 길이보다 큰 경우 새 문자열은 왼쪽 맞춤이되며 선택적인 문자열 매개 변수는 나머지 공간을 사용합니다. string 매개 변수가 지정되지 않으면 문자열에 공백이 채워집니다.

str ="abcd"
str.ljust(4)          => "abcd"
str.ljust(10)         => "abcd      "

문자열을 오른쪽 정렬하려면 rjust 메서드를 사용합니다. 여기에는 새로운 문자열의 문자 수를 나타내는 정수와 채울 패턴을 나타내는 문자열이라는 두 개의 매개 변수가 사용됩니다.

정수가 원래 문자열의 길이보다 큰 경우, 새로운 문자열은 선택적인 문자열 매개 변수가 나머지 공간을 차지하면서 오른쪽 정렬됩니다. string 매개 변수가 지정되지 않으면 문자열에 공백이 채워집니다.

str = "abcd"
str.rjust(4)          => "abcd"
str.rjust(10)         => "      abcd"

문자열을 중심하려면 사용 center 방법. 이것은 새로운 문자열의 폭을 나타내는 정수와 원래 문자열이 채워질 문자열을 두 개의 매개 변수로 취합니다. 문자열이 가운데 정렬됩니다.

str = "abcd"
str.center(4)          => "abcd"
str.center(10)         => "   abcd   "


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow