17.3 Strings
Rust에는 두 타입의 string이 있다: String
과 &str
.
String
은 바이트들의 벡터로 저장되고(Vec<u8>
) 검증된 UTF-8 형태라고 보장하지 않는다. String
은 힙에 할당되고, 확장 가능하지만 null로 끝을 맺지 않는다.
&str
은 조각으로(&[u8]
) 항상 검증된 UTF-8 형태를 지칭하고, &[T]
이 Vec<T>
로 보이는 것처럼 String
으로 사용되 보여줄 수 있다.
fn main() { // (모든 타입 주해는 꼭 필요하진 않다) // 일기 전용 메모리에 할당된 string 참조. let pangram: &'static str = "the quick brown fox jumps over the lazy dog"; println!("Pangram: {}", pangram); // 단어들을 역순으로 나열, 새 string이 할당되지 않는다. println!("Words in reverse"); for word in pangram.split_whitespace().rev() { println!("> {}", word); } // 문자들을 벡터로 복사하고, 정렬 및 중복 삭제. let mut chars: Vec<char> = pangram.chars().collect(); chars.sort(); chars.dedup(); // 비어있으면서 확장 가능한 `String` 생성. let mut string = String::new(); for c in chars { // char를 string의 끝에 삽입 string.push(c); // string의 끝에 string 삽입 string.push_str(", "); } // 다듬어진 string은 원본의 조각이고, 새 할당은 되지 않았다. let chars_to_trim: &[char] = &[' ', ',']; let trimmed_str: &str = string.trim_matches(chars_to_trim); println!("Used characters: {}", trimmed_str); // string 힙 할당. let alice = String::from("I like dogs"); // 수정된 string을 보관하기 위한 새 메모리 할당. let bob: String = alice.replace("dog", "cat"); println!("Alice says: {}", alice); println!("Bob says: {}", bob); }
str
/String
메소드는 아래에서 더 찾아볼 수 있다.
std::str 과 std::string 모듈.