웹사이트 검색

Ruby에서 문자열 메서드로 작업하는 방법


소개

Ruby 문자열에는 많은 프로그램에서 일반적인 작업인 텍스트를 쉽게 수정하고 조작할 수 있는 많은 내장 메서드가 있습니다.

이 자습서에서는 문자열 메서드를 사용하여 문자열의 길이를 결정하고, 문자열을 인덱스 및 분할하여 하위 문자열을 추출하고, 공백 및 기타 문자를 추가 및 제거하고, 문자열에서 문자의 대소문자를 변경하고, 텍스트를 찾고 바꿉니다. 완료되면 이러한 방법을 자신의 프로그램에 통합할 수 있습니다.

문자열 길이 결정

문자열 메서드 length는 문자열의 문자 수를 반환합니다. 이 방법은 최소 또는 최대 암호 길이를 적용하거나 약어로 사용하기 위해 특정 제한 내에서 더 큰 문자열을 잘라야 하는 경우에 유용합니다.

다음은 문장의 길이를 출력하는 예입니다.

open_source = "Sammy contributes to open source."
print open_source.length
Output
33

문자, 숫자, 공백 문자 및 기호를 포함한 모든 문자는 문자열의 일부이므로 계산됩니다.

문자열이 비어 있는지 확인하려면 길이가 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"]

이는 문자열의 문자를 조작하거나 변환하는 데 유용할 수 있습니다.

다음으로 문자열에서 문자의 대소문자를 변경하는 방법을 살펴보겠습니다.

대문자와 소문자로 변환

upcasedowncase 메서드는 원래 문자열의 모든 문자가 대문자 또는 소문자로 변환된 문자열을 반환합니다. 문자가 아닌 문자열의 모든 문자는 변경되지 않습니다.

문자열 Sammy Shark를 모두 대문자로 변환해 보겠습니다.

name = "Sammy Shark"
print name.upcase
Ouput
SAMMY SHARK

이제 문자열을 모두 소문자로 변환해 보겠습니다.

print name.downcase
Ouput
sammy shark

upcasedowncase 함수를 사용하면 전체 대소문자를 일관되게 만들어 문자열을 더 쉽게 평가하고 비교할 수 있습니다. 예를 들어 사용자 이름을 요청하고 사용자가 대문자로 사용자 이름을 입력하는 경우 사용자 입력을 소문자로 입력하고 소문자로 알려진 값과 비교할 수 있습니다.

Ruby 문자열에는 첫 번째 문자가 대문자인 새 문자열을 반환하는 capitalize 메서드도 있습니다.

"sammy".capitalize # "Sammy"

이것은 편리한 방법이지만 사용 방법에 주의하십시오. 첫 글자만 대문자로 표시하므로 필요한 사용 사례에 항상 맞지 않을 수 있습니다.

Ruby는 대소문자를 바꾼 문자열을 반환하는 swapcase 메서드도 제공합니다.

text = "Sammy"
print text.swapcase
sAMMY

downcase, upcase, captalizeswapcase 메서드는 모두 새 문자열을 반환하고 기존 문자열은 변경되지 않은 상태로 둡니다. 텍스트를 즉시 인쇄하는 것 외에 다른 작업을 수행하는 경우 이를 기억하는 것이 중요합니다. 다음 예를 살펴보십시오.

text = "sammy"
text.capitalize

print "Hello, #{text}!"
Output
Hello, sammy!

text 변수에서 capitalize를 호출했지만 capitalize에서 반환된 값을 캡처하지 않았습니다. 다음과 같이 프로그램을 다시 작성해야 합니다.

text = "sammy"
text = text.capitalize

print "Hello, #{text}!"
Output
Hello, Sammy!

대신 downcase!, upcase!, capitalize!swapcase!를 사용하여 원래 문자열을 수정할 수 있습니다.

text = "sammy"
text = text.capitalize!

print "Hello, #{text}!"

그래도 조심하세요. 원래 문자열을 변경하는 데는 단점이 있습니다. Ruby는 두 가지 방법을 모두 제공하므로 필요에 맞는 방법을 선택할 수 있습니다.

이제 문자열에서 공백을 추가하고 제거해 보겠습니다.

패딩 및 스트립 문자열

일부 텍스트의 서식을 지정해야 하는 프로그램을 작성하는 경우 다른 데이터와 정렬하기 위해 문자열 앞, 뒤 또는 주위에 공백을 추가해야 하는 경우가 종종 있습니다. 다른 경우에는 추가 공백이나 특수 문자와 같이 문자열의 시작이나 끝에서 불필요한 문자를 제거해야 할 수 있습니다.

문자열을 공백으로 둘러싸려면 center 메서드를 사용하세요.

"Sammy",center(21) # " Sammy "

다른 문자를 사용하려면 문자열을 두 번째 인수로 지정할 수 있습니다.

" [Sammy] ".center(21, "<>") # "<><><> [Sammy] <><><>"

ljustrjust 메서드는 문자열의 왼쪽 또는 오른쪽에 공백이나 문자를 추가하고 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

텍스트를 찾는 방법을 살펴보았으므로 해당 텍스트를 다른 텍스트로 대체하는 방법을 살펴보겠습니다.

문자열의 텍스트 바꾸기

워드 프로세서의 찾기 및 바꾸기 기능을 사용하면 문자열을 검색하고 다른 문자열로 바꿀 수 있습니다. subgsub 메소드를 사용하여 Ruby에서 이를 수행할 수 있습니다.

sub 메서드는 문자열의 일부를 다른 것으로 바꿉니다.

Sammy는 더 이상 풍선을 가지고 있지 않습니다. 그것은 날아갔다. 하위 문자열 \has\\had\로 변경해 보겠습니다.

balloon = "Sammy has a balloon"
print balloon.sub("has","had")

출력 결과는 다음과 같습니다.

Ouput
Sammy had a balloon.

sub 메서드는 일치 항목의 첫 번째 항목만 새 텍스트로 바꿉니다. has라는 단어가 두 번 나타나는 수정된 문자열을 사용하겠습니다.

balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.sub("has","had")
Output
Sammy had a balloon. The balloon has a ribbon

첫 번째 항목만 변경되었습니다.

모두 변경하려면 전역 대체를 수행하는 gsub 메서드를 사용하세요.

balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.gsub("has","had")
Output
Sammy had a balloon. The balloon had a ribbon

subgsub 메서드는 항상 새 문자열을 반환하고 원본은 수정되지 않은 상태로 둡니다. 문자열에서 "balloon\을 "boomerang\으로 변경하여 이를 시연해 보겠습니다.

text = "Sammy has a balloon"
text.gsub("ballooon", "boomerang")
print text
Output
Sammy 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
Output
Sammy has a blue boomerang

gsub! 메서드를 사용하여 전역 대체를 수행할 수도 있습니다.

subgsub 메서드는 검색 패턴에 대한 정규식을 허용합니다. 문자열의 모든 모음을 @ 기호로 바꾸겠습니다.

"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에서 배열 메서드를 사용하는 방법