문자열 (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이라는 저장소에 다 저장할 수 있어서 정확한 사이즈를 몰라서 항상 &
를 붙여야 합니다.
메모리 저장소 | 설명 |
---|---|
binary | 0과 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인지 확인합니다.
지금부터 배우는 메서드는 다 String
과 &str
형태에 사용할 수 있습니다.
인덱스 메서드
인덱스란 문자열에서 각 문자의 위치 번호를 뜻합니다.
0 인덱스는 첫 번째 문자를 뜻합니다.
1 인덱스는 두 번째 문자를 뜻합니다.
사실 x
인덱스는 x + 1
번째 문자입니다.
문자열의 인덱스는 &str
에서 chars()
로 바꾸고 nth()
를 사용해서 n
번째 인덱스를 찾을 수 있습니다.
참고로 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()
를 사용하면 각 문자를 아스키 코드로 변환합니다.
이를 사용하면 사실 '배열'이 만들어 지는데 이는 나중에 더 자세히 배우겠습니다.
참고로 배열을 출력하기 위해서는 {}
대신 {:?}
를 사용해야 합니다.