Ruby Language
문자열
수색…
통사론
- '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
은 구분 기호에 따라 String
을 Array
로 분할합니다.
"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
은 구분자에 따라 Array
를 String
으로 조인합니다.
["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은 초과 선행 공백을 제거하는 <<~
을 도입하여 문제를 해결합니다.
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 "