771 단어
4 분
문자열 타입
문자열 타입 종류
Rust에서 문자열은 크게 두 가지 타입이 있습니다.
String: 변경 가능한, 힙에 저장되는 문자열&str: 변경 불가능한, 문자열 슬라이스
그리고 **문자 타입(char)**도 있습니다.
char은 단일 문자를 표현하며, 작은따옴표(')로 감쌉니다.
let c: char = 'A';let k: char = '한';문자(char)와 문자열(String/&str) 차이
char: 단 하나의 문자. UTF-8 기준 4바이트까지 저장 가능&str/String: 여러 문자로 이루어진 문자열
let c: char = 'R';let s: &str = "Rust";let s2: String = String::from("Rust");&str와 String 차이
&str은 보통 문자열 리터럴처럼 프로그램 안에 박혀있는 고정된 문자열을 나타냅니다.
let hello: &str = "Hello, world!";String은 힙에 저장되며, 길이를 변경하거나 조작할 수 있는 문자열입니다.
let mut s = String::from("Hello");s.push_str(", world!");문자열 만들기
문자열 리터럴
let s: &str = "Rust";String으로 만들기
let s1 = String::from("Rust");let s2 = "Rust".to_string();문자열 자주 쓰는 메서드
len
문자열의 바이트 길이를 반환합니다.
assert_eq!("Rust".len(), 4);assert_eq!("안녕".len(), 6); // UTF-8은 한 글자라도 1바이트 이상일 수 있음is_empty
문자열이 비어 있는지 확인합니다.
assert_eq!("".is_empty(), true);assert_eq!("Rust".is_empty(), false);push / push_str
문자나 문자열을 뒤에 추가합니다.
let mut s = String::from("Rust");s.push('!');s.push_str(" Lang");assert_eq!(s, "Rust! Lang");replace
특정 문자열을 다른 문자열로 바꿉니다.
let s = "I like Rust".replace("Rust", "Python");assert_eq!(s, "I like Python");trim
문자열 양쪽의 공백과 쓸데없는 문자를 제거합니다.
let s = "\n Hello Rust \n";assert_eq!(s.trim(), "Hello Rust");split
문자열을 나눕니다.
let langs: Vec<&str> = "Rust,Go,Python".split(',').collect();assert_eq!(langs, vec!["Rust", "Go", "Python"]);contains
특정 문자열이 포함되어 있는지 확인합니다.
assert_eq!("Rust is fast".contains("fast"), true);assert_eq!("Rust is fast".contains("slow"), false);starts_with / ends_with
문자열이 특정 문자열로 시작하거나 끝나는지 확인합니다.
assert_eq!("Rustacean".starts_with("Rust"), true);assert_eq!("Ferris".ends_with("is"), true);인덱싱과 슬라이싱
인덱싱
Rust에서는 문자열을 인덱스로 바로 접근할 수 없습니다.
let ch = "Rust"[0]; // 에러 발생대신 chars()나 bytes() 메서드를 사용해야 합니다.
let s = "Rust";let first_char = s.chars().nth(0);assert_eq!(first_char, Some('R'));슬라이싱
&str의 경우 Range를 사용해서 슬라이싱이 가능합니다.
단, 문자열 인덱스는 바이트 단위이므로 UTF-8 문자를 중간에서 자르면 런타임 오류가 발생합니다.
let nums = "0123456789";assert_eq!(&nums[0..=7], "01234567")
let hello = "안녕하세요";let slice = &hello[0..2]; // panic 발생 (UTF-8 코드 포인트 중간 자름)많이 쓰는 변환
&str <-> String 변환
// &str → Stringlet s1: String = "Hello".to_string();let s2: String = String::from("Hello");
// String → &strlet s3: &str = &s1;문자(char) 관련 유용한 메서드
let c: char = 'a';
// 대문자로 변환assert_eq!(c.to_ascii_uppercase(), 'A');
// 알파벳인지 확인assert_eq!(c.is_alphabetic(), true);
// 숫자인지 확인assert_eq!('1'.is_numeric(), true);