String
String
์ ํ์ ํ ๋น๋๊ณ ๊ฐ๋ณ ๊ธธ์ด์ ํ์ค UTF-8 ๋ฌธ์์ด ๋ฒํผ์
๋๋ค:
fn main() { let mut s1 = String::new(); s1.push_str("Hello"); println!("s1: len = {}, capacity = {}", s1.len(), s1.capacity()); let mut s2 = String::with_capacity(s1.len() + 1); s2.push_str(&s1); s2.push('!'); println!("s2: len = {}, capacity = {}", s2.len(), s2.capacity()); let s3 = String::from("๐จ๐ญ"); println!("s3: len = {}, number of chars = {}", s3.len(), s3.chars().count()); }
String
์ Deref<Target = str>
์ ๊ตฌํํฉ๋๋ค. ์ด๋ , String
๊ฐ์ ๋ํด์๋ str
์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ํธ์ถ ํ ์ ์๋ค๋ ์๋ฏธ ์
๋๋ค.
String::new
๋ ์๋ก์ด ๋น ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.String::with_capacity
๋ ์๋ก ๋ง๋ค ๋ฌธ์์ด ๋ฒํผ์ ๋ฃ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.String::len
์String
์ ๋ฐ์ดํธ ํฌ๊ธฐ๋ฅผ ๋ฐํํฉ๋๋ค. (์ค์ ๋ฌธ์ ๊ฐ์์๋ ๋ค๋ฅผ ์ ์์ต๋๋ค.)String::chars
๋ ์ค์ ๋ฌธ์(character)๋ค์ ๋ํ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.char
๋ก ํํ๋๋ ๋ฌธ์๋ ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์ธ์ํ๊ณ ์ฌ์ฉํ๋ ๋ฌธ์์๋ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์์ ๊ฒฐํฉ์ผ๋ก ๋ฌธ์๋ฅผ ํํํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด์ ๋ํด์๋ Grapheme Cluster๋ฅผ ์ฐธ๊ณ ํ์ธ์.- ์ฌ๋๋ค์ด ๋ฌธ์์ด์ด๋ผ๊ณ ๋งํ ๋์๋
&str
์ด๊ฑฐ๋String
์ผ ์ ์์ต๋๋ค. - ์ด๋ค ํ์
์ด
Deref<Target = T>
๋ฅผ ๊ตฌํํ๊ณ ์์ผ๋ฉด, ์ปดํ์ผ๋ฌ๋ ์ฌ๋ฌ๋ถ์ดT
์ ๋ฉ์๋๋ค์ ํธ์ถํ ์ ์๊ฒ ๋์์ค๋๋ค.String
์Deref<Target = str>
์ ๊ตฌํํ๊ณ ์๊ธฐ ๋๋ฌธ์String
์ ๋ํด์๋str
๋ฉ์๋๋ค์ ํธ์ถํ ์ ์์ต๋๋ค.let s3 = s1.deref();
์let s3 = &*s1;
์ ๋น๊ตํด๋ณด์ธ์.
String
์ ๋ฐ์ดํธ ๋ฒกํฐ์ ๋ํผ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ๋ฒกํฐ๊ฐ ์ง์ํ๋ ์ฌ๋ฌ๊ฐ์ง ์ฐ์ฐ๋ค์String
๋ ์ง์ํฉ๋๋ค. ๋ค๋งString
์ ๋ช๊ฐ์ง ๋ณด์ฅ ๋ด์ฉ์ด ๋ ์์ต๋๋ค.String
์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๋ ๋ฐฉ๋ฒ๋ค์ ๋น๊ตํด๋ณด์ธ์:s3.chars().nth(i).unwrap()
๋ฅผ ์ด์ฉํ์ฌ ํ ๋ฌธ์๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ,i
๊ฐ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋, ๋ฒ์ด๋์ง ์์ ๋ ๋์์ ์ค๋ช ํ์ธ์.s3[0..4]
๋ฅผ ์ด์ฉํด์ ๋ฌธ์์ด์ ์ผ๋ถ๋ฅผ ์ ํํ๋๋ฐ, ์ฌ๋ผ์ด์ค๊ฐ ์ ๋์ฝ๋ ๋ฌธ์์ด ๊ฒฝ๊ณ์ ๋ฑ ๋ง์ง ์์ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๋๋์ง ์ค๋ช ํ์ธ์.