Ruby에서 문자열 메서드로 작업하는 방법
소개
Ruby 문자열에는 많은 프로그램에서 일반적인 작업인 텍스트를 쉽게 수정하고 조작할 수 있는 많은 내장 메서드가 있습니다.
이 자습서에서는 문자열 메서드를 사용하여 문자열의 길이를 결정하고, 문자열을 인덱스 및 분할하여 하위 문자열을 추출하고, 공백 및 기타 문자를 추가 및 제거하고, 문자열에서 문자의 대소문자를 변경하고, 텍스트를 찾고 바꿉니다. 완료되면 이러한 방법을 자신의 프로그램에 통합할 수 있습니다.
문자열 길이 결정
문자열 메서드 length
는 문자열의 문자 수를 반환합니다. 이 방법은 최소 또는 최대 암호 길이를 적용하거나 약어로 사용하기 위해 특정 제한 내에서 더 큰 문자열을 잘라야 하는 경우에 유용합니다.
다음은 문장의 길이를 출력하는 예입니다.
open_source = "Sammy contributes to open source."
print open_source.length
Output33
문자, 숫자, 공백 문자 및 기호를 포함한 모든 문자는 문자열의 일부이므로 계산됩니다.
문자열이 비어 있는지 확인하려면 길이가 0
인지 확인하거나 empty?
메서드를 사용할 수 있습니다.
name = ""
name.empty? # true
name = "Sammy"
name.empty? # false
name = " "
name.empty? # false
문자열을 인덱싱하고 문자열의 내용에 액세스하는 방법을 살펴보겠습니다.
문자열 내의 문자 액세스
문자열의 일부 문자를 인쇄하거나 작업하려면 slice
메서드를 사용하여 원하는 부분을 가져옵니다.
각 요소가 인덱스 번호에 해당하는 배열과 마찬가지로 문자열의 각 문자도 인덱스 번호 0부터 시작하는 인덱스 번호에 해당합니다.
문자열 Sammy
의 경우 인덱스 분석은 다음과 같습니다.
0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
S | a | m | m | y |
slice
메서드를 사용하면 단일 문자 또는 문자 범위를 가져올 수 있습니다. 단일 정수를 전달하면 해당 인덱스에 있는 문자가 반환됩니다. 쉼표로 구분된 두 개의 정수를 전달하면 slice
가 첫 번째 인덱스부터 마지막 인덱스까지 모든 문자를 반환하도록 지시합니다. slice
메서드는 추출할 문자를 지정하기 위해 1..4
와 같은 범위도 허용합니다.
"Sammy".slice(0) # "s"
"Sammy".slice(1,2) # "am"
"Sammy".slice(1..4) # "ammy"
[]
구문은 slice
의 별칭이므로 문자열을 배열처럼 취급할 수 있습니다.
"Sammy"[0] # "s"
"Sammy"[1,2] # "am"
"Sammy"[1..4] # "ammy"
음수 인덱스를 사용하여 문자열 끝에서 단일 문자에 액세스할 수도 있습니다. -1
을 사용하면 문자열의 마지막 문자에 액세스할 수 있고, -2
는 마지막에서 두 번째 문자에 액세스할 수 있습니다.
마지막으로 chars
메서드를 사용하여 문자열을 문자 배열로 변환할 수 있습니다.
"sammy".chars # ["S", "a", "m", "m", "y"]
이는 문자열의 문자를 조작하거나 변환하는 데 유용할 수 있습니다.
다음으로 문자열에서 문자의 대소문자를 변경하는 방법을 살펴보겠습니다.
대문자와 소문자로 변환
upcase
및 downcase
메서드는 원래 문자열의 모든 문자가 대문자 또는 소문자로 변환된 문자열을 반환합니다. 문자가 아닌 문자열의 모든 문자는 변경되지 않습니다.
문자열 Sammy Shark
를 모두 대문자로 변환해 보겠습니다.
name = "Sammy Shark"
print name.upcase
OuputSAMMY SHARK
이제 문자열을 모두 소문자로 변환해 보겠습니다.
print name.downcase
Ouputsammy shark
upcase
및 downcase
함수를 사용하면 전체 대소문자를 일관되게 만들어 문자열을 더 쉽게 평가하고 비교할 수 있습니다. 예를 들어 사용자 이름을 요청하고 사용자가 대문자로 사용자 이름을 입력하는 경우 사용자 입력을 소문자로 입력하고 소문자로 알려진 값과 비교할 수 있습니다.
Ruby 문자열에는 첫 번째 문자가 대문자인 새 문자열을 반환하는 capitalize
메서드도 있습니다.
"sammy".capitalize # "Sammy"
이것은 편리한 방법이지만 사용 방법에 주의하십시오. 첫 글자만 대문자로 표시하므로 필요한 사용 사례에 항상 맞지 않을 수 있습니다.
Ruby는 대소문자를 바꾼 문자열을 반환하는 swapcase
메서드도 제공합니다.
text = "Sammy"
print text.swapcase
sAMMY
downcase
, upcase
, captalize
및 swapcase
메서드는 모두 새 문자열을 반환하고 기존 문자열은 변경되지 않은 상태로 둡니다. 텍스트를 즉시 인쇄하는 것 외에 다른 작업을 수행하는 경우 이를 기억하는 것이 중요합니다. 다음 예를 살펴보십시오.
text = "sammy"
text.capitalize
print "Hello, #{text}!"
OutputHello, sammy!
text
변수에서 capitalize
를 호출했지만 capitalize
에서 반환된 값을 캡처하지 않았습니다. 다음과 같이 프로그램을 다시 작성해야 합니다.
text = "sammy"
text = text.capitalize
print "Hello, #{text}!"
OutputHello, Sammy!
대신 downcase!
, upcase!
, capitalize!
및 swapcase!
를 사용하여 원래 문자열을 수정할 수 있습니다.
text = "sammy"
text = text.capitalize!
print "Hello, #{text}!"
그래도 조심하세요. 원래 문자열을 변경하는 데는 단점이 있습니다. Ruby는 두 가지 방법을 모두 제공하므로 필요에 맞는 방법을 선택할 수 있습니다.
이제 문자열에서 공백을 추가하고 제거해 보겠습니다.
패딩 및 스트립 문자열
일부 텍스트의 서식을 지정해야 하는 프로그램을 작성하는 경우 다른 데이터와 정렬하기 위해 문자열 앞, 뒤 또는 주위에 공백을 추가해야 하는 경우가 종종 있습니다. 다른 경우에는 추가 공백이나 특수 문자와 같이 문자열의 시작이나 끝에서 불필요한 문자를 제거해야 할 수 있습니다.
문자열을 공백으로 둘러싸려면 center
메서드를 사용하세요.
"Sammy",center(21) # " Sammy "
다른 문자를 사용하려면 문자열을 두 번째 인수로 지정할 수 있습니다.
" [Sammy] ".center(21, "<>") # "<><><> [Sammy] <><><>"
ljust
및 rjust
메서드는 문자열의 왼쪽 또는 오른쪽에 공백이나 문자를 추가하고 center
메서드와 똑같이 작동합니다.
"Sammy".ljust(20) # "Sammy "
"Sammy".rjust(20) # " Sammy"
"Sammy".rjust(20, "!") # "!!!!!!!!!!!!!!!Sammy"
문자열에서 선행 공백을 제거하려면 rstrip
메서드를 사용하십시오. 후행 공백을 제거하려면 lstrip
을 사용하십시오. strip
을 사용하여 선행 및 후행 공백을 모두 제거합니다.
" Sammy".rstrip # "Sammy"
"Sammy ".lstrip # "Sammy"
" Sammy ".strip # "Sammy"
center!
, ljust
!, rjust!
, lstrip!
, rstrip!
및 strip!
메서드를 사용하여 원래 문자열을 수정합니다.
때로는 문자열 끝에서 문자를 제거해야 합니다. Ruby의 chop
메서드가 바로 그 역할을 합니다. 문자열에서 마지막 문자를 제거합니다.
"Sammy".chop # "Samm"
이는 개행 문자(\n
) 문자열에서:
"This string has a newline\n".chop
chop
메서드는 원래 문자열을 그대로 두고 새 문자열을 반환합니다. chop!
메서드는 기존 문자열을 제자리에서 수정합니다.
chomp
메서드는 문자열 끝에서 여러 문자를 제거할 수 있습니다.
"Sammy".chomp("my") # "Sam"
제거할 문자열을 지정하지 않으면 chomp
가 개행을 제거합니다.
"This string has a newline\n".chomp # "This string has a newline
그러나 문자열에 개행 문자가 포함되어 있지 않으면 chomp
는 원래 문자열을 반환합니다.
"Sammy".chomp # "Sammy"
이렇게 하면 줄 바꿈을 제거할 때 항상 마지막 문자를 제거하는 chop
메서드보다 chomp
를 사용하는 것이 조금 더 안전해집니다.
Ruby에는 원래 문자열을 변경하고 교체를 수행한 경우 수정된 문자열을 반환하는 chomp!
메서드가 있습니다. 그러나 chomp
와 달리 chomp!
메서드는 문자열을 변경하지 않은 경우 nil
을 반환합니다.
string = "Hello\n"
string.chomp! # "Hello"
string = "Hello"
string.chomp! # nil
다음으로 문자열에서 텍스트를 검색하는 방법을 살펴보겠습니다.
문자 및 텍스트 찾기
문자열에 다른 문자열이 포함되어 있는지 여부를 확인해야 하는 경우가 있습니다.
include?
메소드는 문자열에 다른 문자열이 포함되어 있는지 확인합니다. 문자열이 있으면 true
를 반환하고 그렇지 않으면 false
를 반환합니다.
"Sammy".include?("a") # true
"Sammy".include?("b") # false
index
메서드는 문자의 인덱스를 반환합니다. 또한 하위 문자열의 첫 번째 문자 인덱스를 식별할 수도 있습니다. 그리고 문자나 하위 문자열이 존재하지 않으면 nil
을 반환합니다.
"Sammy".index("a") # 1
"Sammy".index("mm") # 2
"Sammy".index("Fish") # nil
index
메서드는 첫 번째 항목만 찾습니다. 다음은 더 긴 문자열의 예입니다.
text = "Sammy has a balloon"
text.index("a") # 1
Sammy has a balloon
문자열에는 "a\ 문자가 4번 나타납니다. 그러나 index
는 첫 번째 항목만 찾았습니다. 위치를 찾으려면 더 구체적인 내용을 작성해야 합니다. 다른 사건 중 하나.
예를 들어 문자열을 문자 배열로 변환하고 배열 메서드를 사용하여 결과를 반복하고 문자에 대한 인덱스를 선택할 수 있습니다. 이를 수행하는 한 가지 방법은 다음과 같습니다.
text = "Sammy has a balloon"
indices = text.chars
.each_with_index
.select{|char, index| char == "a" }
.map{|pair| pair.last}
print indices
[1, 7, 10, 13]
each_with_index
는 각 문자의 항목과 인덱스를 포함하는 2차원 배열을 반환합니다. select
는 문자가 a
인 항목으로 줄이고 map
은 2차원 배열을 1차원 배열로 변환합니다. 지수.
문자열에서 문자를 찾는 것 외에도 start_with?
메서드를 사용하여 문자열이 문자 또는 하위 문자열로 시작하는지 확인할 수 있습니다.
text = "Sammy has a balloon"
text.start_with?("s") # true
text.start_with?("Sammy has" # true
start_with?
메소드는 여러 문자열을 허용하고 일치하는 문자열이 있으면 true를 반환합니다.
text = "Sammy has a balloon"
text.start_with?("Sammy the Shark", "Sammy") # true
이 예에서 "Sammy the Shark\는 찾을 수 없지만 "Sammy\는 있으므로 반환 값은 true
입니다.
end_with?
메서드를 사용하여 문자열이 주어진 하위 문자열로 끝나는지 확인할 수 있습니다. start_with?
와 똑같이 작동합니다.
text = "Sammy has a balloon"
text.end_with?("balloon") # true
text.end_with?("boomerang") # false
text.end_with?("boomerang", "balloon") # true
텍스트를 찾는 방법을 살펴보았으므로 해당 텍스트를 다른 텍스트로 대체하는 방법을 살펴보겠습니다.
문자열의 텍스트 바꾸기
워드 프로세서의 찾기 및 바꾸기 기능을 사용하면 문자열을 검색하고 다른 문자열로 바꿀 수 있습니다. sub
및 gsub
메소드를 사용하여 Ruby에서 이를 수행할 수 있습니다.
sub
메서드는 문자열의 일부를 다른 것으로 바꿉니다.
Sammy는 더 이상 풍선을 가지고 있지 않습니다. 그것은 날아갔다. 하위 문자열 \has\
를 \had\
로 변경해 보겠습니다.
balloon = "Sammy has a balloon"
print balloon.sub("has","had")
출력 결과는 다음과 같습니다.
OuputSammy had a balloon.
sub
메서드는 일치 항목의 첫 번째 항목만 새 텍스트로 바꿉니다. has
라는 단어가 두 번 나타나는 수정된 문자열을 사용하겠습니다.
balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.sub("has","had")
OutputSammy had a balloon. The balloon has a ribbon
첫 번째 항목만 변경되었습니다.
모두 변경하려면 전역 대체를 수행하는 gsub
메서드를 사용하세요.
balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.gsub("has","had")
OutputSammy had a balloon. The balloon had a ribbon
sub
및 gsub
메서드는 항상 새 문자열을 반환하고 원본은 수정되지 않은 상태로 둡니다. 문자열에서 "balloon\을 "boomerang\으로 변경하여 이를 시연해 보겠습니다.
text = "Sammy has a balloon"
text.gsub("ballooon", "boomerang")
print text
OutputSammy has a balloon
출력에는 우리가 찾고 있는 결과가 표시되지 않습니다. 대체를 지정하는 동안 gsub
의 결과를 새 변수에 할당하지 않았기 때문입니다. 원하는 결과를 얻기 위해 다음과 같이 프로그램을 다시 작성할 수 있습니다.
text = "Sammy has a balloon"
text = text.sub("ballooon", "boomerang")
print text
또는 원래 문자열을 수정하는 sub!
를 대신 사용할 수 있습니다. 몇 가지 문자열 교체를 수행하여 이를 시도해 봅시다. "빨간색 풍선\을 "파란색 부메랑\으로 변경하겠습니다.
text = "Sammy has a red balloon"
text.sub!("red", "blue")
text.sub!("balloon", "boomerang")
print text
OutputSammy has a blue boomerang
gsub!
메서드를 사용하여 전역 대체를 수행할 수도 있습니다.
sub
및 gsub
메서드는 검색 패턴에 대한 정규식을 허용합니다. 문자열의 모든 모음을 @
기호로 바꾸겠습니다.
"Sammy has a red balloon".gsub(/[aeiou]/, "@")
"S@mmy h@s @ r@d b@ll@@n"
대체 값은 문자열일 필요가 없습니다. 해시를 사용하여 개별 문자나 조각을 대체하는 방법을 지정할 수 있습니다. 문자 a
의 모든 항목을 @
로 바꾸고 모든 o
문자를 0으로 바꾸겠습니다.
"Sammy has a red balloon".gsub(/[aeiou]/, {"a" => "@", "o" => "0"})
# "S@mmy h@s @ rd b@ll00n"
이를 사용하여 더 적은 코드로 더 복잡한 대체를 수행할 수 있습니다.
결론
이 자습서에서는 문자열 데이터 유형에 대한 몇 가지 기본 제공 메서드를 사용하여 문자열을 사용하고 조작했습니다. 또한 문자열을 사용하는 많은 방법이 문자열을 변경하지 않고 그대로 두는 방법과 원래 문자열을 수정하는 방법의 두 가지 변형이 있음을 배웠습니다.
당신이 사용하는 것은 당신의 필요에 달려 있습니다. Ruby는 데이터 작업 방식을 선택할 수 있는 유연성을 제공합니다. 그러나 기존 데이터를 수정하지 않는 코드를 작성하면 나중에 디버깅하기가 더 쉬울 수 있습니다.
Ruby에서 데이터로 작업하는 방법을 계속 탐색하려면 다음 관련 자습서를 살펴보십시오.
- Ruby에서 문자열로 작업하는 방법
- 루비에서 배열로 작업하는 방법
- Ruby의 데이터 유형 이해
- Ruby에서 배열 메서드를 사용하는 방법