상세 컨텐츠

본문 제목

7. Rust 문자열

Rust를 처음부터 배우세요

by 러스트코리아 2024. 11. 15. 16:54

본문

반응형

Rust 언어는 두 가지 유형의 문자열을 제공합니다.

  • 문자열 리터럴 &str . Rust의 핵심에 내장된 데이터 유형입니다.
  • 문자열 객체 문자열 . 이는 Rust 코어의 일부가 아니며 단지 Rust 표준 라이브러리의 공개 pub 구조 입니다 .

7.1 문자열 리터럴 &str

문자열 리터럴 &str은 컴파일 시간에 값이 알려진 문자열 유형이며 Rust 언어의 핵심 부분입니다. 문자열 리터럴 &str은 하드 코딩되어 변수에 할당된 문자 모음입니다.

  1. let name1 = "안녕하세요, 간단한 프로그래밍입니다";

문자열 리터럴의 핵심 코드는 std::str 모듈에서 찾을 수 있습니다 . 관심이 있다면 읽어보세요.

Rust의 문자열 리터럴은 문자열 슬라이스 라고 합니다 . 기본 구현이 슬라이싱 이기 때문입니다 .

7.1.1 예

다음 코드에서는 두 개의 문자열 리터럴 회사와 위치를 정의합니다.

  1. fn main() {
  2. let company:&str="페이온";
  3. let location:&str = "한국";
  4. println!("회사명 : {} 위치 :{}",company,location);
  5. }

문자열 리터럴 패턴은 정적 입니다 . 즉, 문자열 리터럴은 생성된 시점부터 프로그램이 끝날 때까지 저장됩니다.

기본값은 static 이므로 static 키워드를 적극적으로 추가할 수도 있습니다. 단지 구문 형식이 조금 이상할 뿐이므로 일상적으로 사용하는 경우에는 무시하면 됩니다.

  1. fn main() {
  2. let company:&'static str = "페이온";
  3. let location:&'static str = "한국";
  4. println!("회사명 : {} 위치 :{}",company,location);
  5. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 회사명 : 페이온 위치 :한국

7.2 문자열 객체

String 객체는 Rust 표준 라이브러리에서 제공하는 내장 유형입니다.

문자열 리터럴과 다릅니다. 문자열 객체는 Rust 코어에 내장된 데이터 유형이 아니며 단지 표준 라이브러리의 공개 pub 구조입니다.

표준 라이브러리의 문자열 객체 정의 구문은 다음과 같습니다.

  1. pub struct String

문자열 개체는 가변 적이고 기본 데이터 인코딩 형식으로 UTF-8을 사용하는 가변 길이 컬렉션입니다 .

문자열 개체는  에 할당되며 런타임 시 문자열 값과 해당 작업 메서드를 제공할 수 있습니다.

7.2.1 문자열 객체 생성 구문

문자열 개체를 만드는 방법에는 두 가지가 있습니다.

  1. 하나는 String::new() 정적 메서드를 사용하여 새로운 빈 문자열을 만드는 것입니다.
  1. String::new()
  1. 다른 하나는 String::from() 메서드를 사용하여 지정된 문자열 리터럴을 기반으로 문자열 개체를 만드는 것입니다.
  1. String::from()

7.2.2 예

다음으로 String::new() 메서드와 String::from() 메서드를 사용하여 문자열 개체를 만들고 문자열 개체의 길이를 출력합니다.

  1. fn main(){
  2.       let empty_string = String::new();
  3.       println!("길이는 {}",empty_string.len());
  4.  
  5.       let content_string = String::from("페이온");
  6.       println!("길이는 {}",content_string.len());
  7. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 길이는 0
  2. 길이는 9

위의 예에서는 두 개의 문자열, 즉 new 메서드를 사용하는 빈 문자열 개체와 from 메서드를 사용하는 문자열 리터럴의 문자열 개체를 만듭니다.

7.3 문자열 객체의 일반적으로 사용되는 메서드

방법원기설명하다

명령어 방법 설명
new() pub const fn new() -> String 새 문자열 개체 만들기
to_string() fn to_string(&self) -> String 문자열 리터럴을 문자열 객체로 변환
replace() pub fn replace<’a, P>(&’a self, from: P, to: &str) -> String 지정된 패턴을 검색하고 바꾸기  
as_str() pub fn as_str(&self) -> &str 문자열 객체를 문자열 리터럴로 변환
push() pub fn push(&mut self, ch: char) 문자열 끝에 문자 추가
push_str() pub fn push_str(&mut self, string: &str) 문자열 끝에 문자열 추가
len() pub fn len(&self) -> usize 문자열의 길이를 바이트 단위로 반환합니다.
trim() pub fn 트림(&self) -> &str 문자열의 시작과 끝에서 공백 문자를 제거합니다.
split_whitespace() pub fn Split_whitespace(&self) -> SplitWhitespace 공백을 기준으로 문자열을 분할하고 분할 반복자를 반환합니다.
split() pub fn split<’a, P>(&’a self, pat: P) -> Split<’a, P> 지정된 패턴에 따라 문자열을 분할하고 분할 반복자를 반환합니다. 패턴 P는 문자열 리터럴, 문자 또는 구분 기호를 반환하는 클로저일 수 있습니다.
chars() pub fn chars(&self) -> Char 문자열의 모든 문자로 구성된 반복자를 반환합니다.

7.4 새로운 빈 문자열 객체 new() 생성

새로운 빈 문자열 객체를 생성하려면 new() 메서드를 호출하면 됩니다.

  1. fn main(){
  2.   let mut z = String::new();
  3.   z.push_str("rust 프로그래밍");
  4.   println!("{}",z);
  5. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. rust 프로그래밍

7.5 문자열 리터럴을 문자열 객체로 변환 to_string()

문자열 리터럴에는 작업 방법이 없으며 문자열 자체만 저장합니다.

실제로는 to_string() 이 있습니다.

문자열에 대해 일부 작업을 수행하려면 문자열을 문자열 개체로 변환해야 합니다. 이 변환 프로세스는 to_string() 메서드를 호출하여 수행할 수 있습니다.

  1. fn main(){
      let name1 = "hello, payon
      payon".to_string();
      println!("{}",name1);
    }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. hello, payon
  2.  payon

7.6 문자열 교체 교체()

문자열 객체의 지정된 문자열 하위 문자열을 다른 문자열로 바꾸려면 replacement() 메서드를 호출하면 됩니다.

replacement() 메소드는 두 개의 매개변수를 허용합니다:

  • 첫 번째 매개변수는 대체될 문자열 하위 문자열 또는 패턴입니다.
  • 두 번째 매개변수는 새로 대체된 문자열입니다.참고: 교체()는 교체할 모든 문자열 하위 문자열이나 패턴을 검색하고 교체합니다.

7.6.1 예

다음 코드에서는 문자열의 모든 문자"회사"을 검색하고 이를 www.mobirise.co.kr으로 바꿉니다.

  1. fn main(){
      let name1 = "페이온시스템
      회사".to_string();  
      let name2 = name1.replace("회사","mobirise.co.kr");  
      println!("{}",name2);
    }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 페이온시스템
      mobirise.co.kr

7.7 문자열 객체를 문자열 리터럴 as_str()로 변환하기

문자열 리터럴은 다음과 같은 문자열의 문자입니다.

  1. let name1 = "페이온";

name1은 Zero Basic Tutorial 자체라는 네 단어만 포함하는 문자열 리터럴입니다.

문자열 리터럴은 문자열 자체만 포함하며 해당 작업 방법을 제공하지 않습니다.

문자열 객체의 문자열 리터럴을 반환하려면 as_str() 메서드를 호출하면 됩니다.

  1. fn main() {
  2.   let example_string = String::from("러스트 프로그래밍");
  3.   print_literal(example_string.as_str());
  4. }
  5. fn print_literal(data:&str ){
  6.   println!("표시된 문자열 리터럴은 다음과 같습니다: {}",data);
  7. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 표시된 문자열 리터럴은 다음과 같습니다: 러스트 프로그래밍

7.8 원래 문자열 push() 뒤에 문자 추가

문자열에 문자를 추가하려면 먼저 문자열을 mutable 로 선언해야 합니다 . 즉, mut 키워드를 사용해야 합니다. 그런 다음 push() 메서드를 호출합니다 .

push()는 새 문자열을 반환하는 대신 원래 문자에 추가합니다.

  1. fn main(){
  2.   let mut company = "주식회사 페이온".to_string();
  3.   company.push('t');
  4.   println!("{}",company);
  5. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 주식회사 페이t

7.9 원래 문자열 뒤에 push_str() 문자열을 추가합니다.

문자열에 문자열을 추가하려면 먼저 문자열을 mutable 로 선언해야 합니다 . 즉, mut 키워드를 사용해야 합니다. 그런 다음 push_str() 메서드를 호출합니다 .

push_str()은 새 문자열을 반환하는 대신 원래 문자에 추가합니다.

  1. fn main(){
  2.   let mut company = "주식회사".to_string();
  3.   company.push_str(" 페이온");
  4.   println!("{}",company);
  5. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 주식회사 페이온

7.10 문자열 길이 얻기 len()

문자열의 총 바이트 수를 반환하려면 len() 메서드를 사용할 수 있습니다.

len() 메서드는 공백을 포함한 모든 문자를 계산합니다.

공백 문자는 탭 문자\t, 공백, 캐리지 리턴\r, 줄 바꿈\n, 캐리지 리턴 및 줄 바꿈\r\n 등을 나타냅니다.

  1. fn main() {
  2.   let fullname = " 주식회사 페이온 www.mobirise.co.kr";
  3.   println!("length is {}",fullname.len());
  4. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. length is 42

7.11 문자열 시작과 끝의 공백을 제거합니다.

공백 문자는 탭 문자\t, 공백, 캐리지 리턴\r, 줄 바꿈\n, 캐리지 리턴 및 줄 바꿈\r\n 등을 나타냅니다.

문자열의 시작과 끝 부분에 있는 공백 문자를 제거하려면 Trim() 메서드를 사용하면 됩니다.

이 메서드는 선행 및 후행 공백 문자를 제거하지 않으며 새 문자열을 반환합니다.

  1. fn main() {
  2.    let fullname = " \t주식회사 \r\n페이온
  3.    러스트 프로그래밍\r\n ";
  4.    println!("Before trim ");
  5.    println!("length is {}",fullname.len());
  6.    println!();
  7.    println!("After trim ");
  8.    println!("length is {}",fullname.trim().len());
  9.    println!("string is :{}",fullname.trim());
  10. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. Before trim 
    length is 58
    
    After trim 
    length is 53
    string is :주식회사 
    페이온
       러스트 프로그래밍

7.12 공백 문자를 사용하여 문자열 분할 Split_whitespace()

공백 문자는 탭 문자\t, 공백, 캐리지 리턴\r, 줄 바꿈\n, 캐리지 리턴 및 줄 바꿈\r\n 등을 나타냅니다.

공백 문자를 기반으로 문자열을 분할하는 것은 가장 일반적으로 사용되는 작업 중 하나입니다. 이러한 이유로 Rust 언어는 문자열이 공백 문자를 기반으로 문자열을 분할하고 반복자를 반환하도록 Split_whitespace()를 제공합니다.

이 반복자를 사용하여 분할 문자열에 액세스할 수 있습니다.

  1. fn main(){
  2.    let msg = "러스트 프로그래밍 www.mobirise.co.kr
  3.    https://mobirise.co.kr".to_string();
  4.    let mut i = 1;
  5.  
  6.    for token in msg.split_whitespace(){
  7.    println!("token {} {}",i,token);
  8.       i+=1;
  9.    }
  10. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. token 1 러스트
    token 2 프로그래밍
    token 3 www.mobirise.co.kr
    token 4 https://mobirise.co.kr

지정된 패턴에 따라 문자열을 분할합니다.

지정된 일부 문자열 하위 문자열을 기반으로 문자열을 분할하려면 분할() 메서드를 사용할 수 있습니다.

Split()은 전달된 지정된 패턴(문자열 구분 기호)에 따라 문자열을 분할하고 분할된 문자열 하위 문자열로 구성된 조각에 대한 반복자를 반환합니다. 이 반복자를 통해 분할된 문자열 하위 문자열을 반복할 수 있습니다.

Split() 메서드의 가장 큰 단점은 재진입이 불가능하다는 것입니다. 즉, 반복자가 사용되면 다시 사용하기 전에 다시 호출해야 합니다.

하지만 먼저 반복자에서 Collect() 메서드를 호출하여 반복자를 벡터로 변환하여 재사용할 수 있습니다.

  1. fn main() {
  2.     let fullname = "영희, 한라산, 한국";
  3.  
  4.    for token in fullname.split(","){
  5.    println!("token is {}",token);
  6. }
  7.  
  8. // 벡터에 저장됨
  9.    println!("\n");
  10.    let tokens:Vec<&str>= fullname.split(",").collect();
  11.    println!("성명 is {}",tokens[0]);
  12.    println!("제일높은 {}",tokens[1]);
  13.    println!("여기는 {}",tokens[2]);
  14. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. token is 영희
    token is 한라산
    token is 한국
    
    
    성명 is 영희
    제일높은 한라산
    여기는 한국

7.13 문자열을 문자 배열 chars()로 분리합니다.

문자열을 모든 문자의 배열로 분리하려면 chars() 메서드를 사용할 수 있습니다.

어떤 면에서 문자열의 각 문자를 반복하려면 먼저 문자열을 반복하기 전에 문자 배열로 나누어야 합니다.

  1. fn main(){
  2.     let n1 = "주식회사 페이온 www.mobirise.co.kr".to_string();
  3.  
  4.    for n in n1.chars(){
  5.      println!("{}",n);
  6.   }
  7. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 주
    식
    회
    사
     
    페
    이
    온
     
    w
    w
    w
    .
    m
    o
    b
    i
    r
    i
    s
    e
    .
    c
    o
    .
    k
    r

7.14 문자열 연결 +

새로운 문자열을 생성하기 위해 한 문자열을 다른 문자열의 끝에 추가하는 것을 연결 이라고 하며 때로는 연결 또는 델타 라고도 합니다 .

연결 의 결과로 새 문자열 개체가 생성됩니다.

Rust 언어는  연결을 완료하기 위해 더하기 기호 +를 사용하며, 이를 문자열 연결 연산자 라고 부릅니다 .

7.14.1 문자열 연결 연산자의 내부 구현 +

문자열 연결기 + 의 내부 구현은 실제로 add() 메서드를 다시 작성합니다. 이 메서드는 두 개의 매개변수를 받습니다. 첫 번째 매개변수는 + 왼쪽에 있는 문자열인 현재 문자열 개체입니다. 두 번째 매개변수는 + 오른쪽에 있는 문자열을 가리키는 참조입니다.

구체적인 메소드 프로토타입은 다음과 같습니다

  1. //문자열 연결 구현
  2. add(self,&str)->String {
  3. // 새로운 문자열 객체를 반환합니다.
  4. }

7.14.2 예

다음 코드에서는 문자열 연결 연산자 +를 사용하여 두 문자열 변수를 새 문자열로 연결합니다.

  1. fn main(){
  2.    let n1 = "주식회사 페이온".to_string();
  3.    let n2 = "러스트 프로그래밍".to_string();
  4.  
  5.    let n3 = n1 + &n2; // n2에 대한 참조를 전달해야 합니다.
  6.    println!("{}",n3);
  7. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 주식회사 페이온러스트 프로그래밍

7.15 _string()으로의 유형 변환

다른 유형을 문자열 유형으로 변환해야 하는 경우 to_string() 메서드를 직접 호출할 수 있습니다.

예를 들어, 숫자 유형 변수의 to_string() 메서드를 호출하여 현재 변수를 문자열 유형으로 변환할 수 있습니다.

  1. fn main(){
  2. let number = 2020;
  3. let number_as_string = number.to_string();
  4.  
  5. // 숫자를 문자열 유형으로 변환
  6. println!("{}",number_as_string);
  7. println!("{}",number_as_string=="2020");
  8. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 2020
  2. true

7.16 매크로 포맷 포맷!

다양한 변수나 객체를 문자열로 연결하려면 형식 매크로( format! )를 사용할 수 있습니다.

형식 매크로 형식은 다음과 같이 사용됩니다:

  1. fn main(){
  2. let n1 = "처음부터 배우는".to_string();
  3. let n2 = "러스트 프로그래밍".to_string();
  4. let n3 = format!("{} {}",n1,n2);
  5. println!("{}",n3);
  6. }

위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.

  1. 처음부터 배우는 러스트 프로그래밍
현재 콘텐츠 저작권은 chapin666 또는 그 계열사에 있습니다. 
반응형

'Rust를 처음부터 배우세요' 카테고리의 다른 글

9. Rust 조건부 판단  (0) 2024.11.15
8. Rust 연산자  (0) 2024.11.15
6. Rust 상수  (0) 2024.11.13
5. Rust 변수 정의  (0) 2024.11.13
4. Rust 데이터 유형  (0) 2024.11.13

관련글 더보기