Skip to main content

문자열 (str)

str(문자열)은 char 데이터 형태를 여러게 붙여 놓은 데이터 형태입니다.

즉, 문자열은 글자를 담고 있는 데이터 형태입니다.

char은 ''를 사용하고 str은 ""를 사용해야 합니다.

str 데이터 형태

str 변수를 선언할 때 str을 사용하는 것이 아니라 &str를 대신 사용해야 합니다.

사실 Rust에는 str과 String 데이터 형태가 있는데 str은 ASCII를 사용하고 String은 UTF-8 (Unicode)를 사용합니다.

UTF-8이란 ASCII보다 훨씬 더 많은 문자를 가지고 있습니다.

str은 binary, stack, heap이라는 저장소에 다 저장할 수 있어서 정확한 사이즈를 몰라서 항상 &를 붙여야 합니다.

메모리 저장소설명
binary0과 1로 저장
stack데이터가 끝에 들어가고 가장 위는 나가는 형식
heap프로그래머가 코딩할 때 저장하는 모든 변수, 코드 등이 들어있는 메모리

String은 heap에만 저장할 수 있습니다.

&str과 String

&str let vari: &str = "" 형태로 변수를 선언하면 되고 String은 let vari = String::from("")과 같이 선언하면 됩니다.

참고로 String&를 붙이면 &str로 변합니다.

&에 대해서는 나중에 더 자세히 배우겠습니다.

다양한 매서드

길이와 관련된 메서드

len()을 사용하면 &str의 길이를 알 수 있습니다.

is_empty()&str이 비어있는지 아닌지를 판단합니다.

즉, len()의 값이 0인지 확인합니다.

note

지금부터 배우는 메서드는 다 String&str 형태에 사용할 수 있습니다.

인덱스 메서드

인덱스란 문자열에서 각 문자의 위치 번호를 뜻합니다.

0 인덱스는 첫 번째 문자를 뜻합니다.

1 인덱스는 두 번째 문자를 뜻합니다.

사실 x 인덱스는 x + 1 번째 문자입니다.

문자열의 인덱스는 &str에서 chars()로 바꾸고 nth()를 사용해서 n번째 인덱스를 찾을 수 있습니다.

note

참고로 nth()는 사실 Some("")를 반환하기 때문에 Some()을 없에기 위해서 unwrap()를 사용합니다.

대소문자

to_ascii_uppercase()는 문자열(모든 문자들)을 대문자로 변환합니다.

to_ascii_lowercase()는 문자열(모든 문자들)을 소문자로 변환합니다.

참고로 to_uppercase()to_lowercase()와 다르게 ascii 대소문자 변형은 알파벳만 변환하지 않고 그리스어, 라틴어 등도 가능합니다.

contains() 메서드

어떤 값이 문자열에 포함되어 있는지 확인하는 메서드입니다.

repeat() 메서드

repeat(x)은 어떤 문자열을 x번 반복하는 메서드입니다.

참고로 x 숫자가 너무 크면 panic이 생깁니다.

panic이라는 것은 Rust에서 코드르 실행하는 동안 예외, 에러 발생 또는 아주 위험한 코드이면 panic합니다.

startswith() 메서드

startswith()을 사용하면 어떤 문자열이 어떤 값으로 시작하는지 확인합니다.

ASCII 코드

as_bytes()를 사용하면 각 문자를 아스키 코드로 변환합니다.

이를 사용하면 사실 '배열'이 만들어 지는데 이는 나중에 더 자세히 배우겠습니다.

참고로 배열을 출력하기 위해서는 {} 대신 {:?}를 사용해야 합니다.