Rust - 문자열 자르기, 분리하기

러스트에서 String을 분리하여 여러 String으로 분리하는 방법에 대해서 알아보겠습니다.

1. 특정 문자를 기준으로 문자열 분리

split()을 이용한 방법

String.split(str)은 인자로 전달된 문자열로 String을 분리합니다. 그리고 Iterable 객체를 리턴합니다.

아래와 같이 리턴 값을 for문으로 반복하면서 분리된 문자열을 출력할 수 있습니다.

  • split(" ")는 space를 기준으로 문자열을 분리
fn main() {
    let my_str = String::from("Hello World Rust Programming");
    let strings = my_str.split(" ");
    for s in strings {
        println!("{}", s);
    }
}

Output:

Hello
World
Rust
Programming

split_whitespace()을 이용한 방법

만약 space로 문자열을 분리한다면, split(" ") 대신에 split_whitespace() 함수를 사용해도 됩니다.

fn main() {
    let my_str = String::from("Hello World Rust Programming");
    let strings = my_str.split_whitespace();
    for s in strings {
        println!("{}", s);
    }
}

Output:

Hello
World
Rust
Programming

lines()을 이용한 방법

만약 개행 문자(new line)로 문자열을 분리한다면 split(\n) 대신에 lines()를 사용할 수 있습니다.

fn main() {
    let my_str = String::from("Hello\nWorld Rust\nProgramming");
    let strings = my_str.lines();
    for s in strings {
        println!("{}", s);
    }
}

Output:

Hello
World Rust
Programming

split_terminator()을 이용한 방법

split()으로 문자열을 나눌 때, 아래 예제처럼 마지막 문자열이 Empty가 될 수 있습니다. for문으로 변수를 모두 출력하면 마지막에 줄바꿈되어 어색하게 보입니다.

fn main() {
    let my_str = String::from("Hello.World.Rust.");
    let strings = my_str.split(".");
    for s in strings {
        println!("{}", s);
    }
    println!("Finish")
}

Output:

Hello
World
Rust

Finish

split_terminator()를 사용하면 이런 불필요한 줄바꿈 문자를 출력하지 않도록 할 수 있습니다.

split_terminator()split()과 동일하지만, 분리하여 만들어진 마지막 문자열이 Empty일 때, 리턴 값에 포함시키지 않습니다. 따라서, Empty에 대해서 출력하지 않게 됩니다.

fn main() {
    let my_str = String::from("Hello.World.Rust.");
    let strings = my_str.split_terminator(".");
    for s in strings {
        println!("{}", s);
    }
    println!("Finish")
}

Output:

Hello
World
Rust
Finish

2. Index를 기준으로 문자열 분리

split_at()을 이용한 방법

split_at()을 사용하면 Index를 기준으로 문자열을 분리할 수 있습니다.

  • split_at(index)는 index를 기준으로 두개의 문자열로 분리
  • let (str1, str2) = my_str.split_at(5)으로 분리된 2개의 문자열은 각각의 변수로 할당
  • index가 5이면, 0~4까지의 Index가 첫번째 문자열로, 나머지는 두번째 문자열로 리턴

다음과 같이 split_at()를 사용할 수 있습니다.

fn main() {
    let my_str = String::from("HelloWorld");

    let (str1, str2) = my_str.split_at(5);
    println!("str1: {}", str1);
    println!("str2: {}", str2);
}

Output:

str1: Hello
str2: World
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha