https://www.tutorialspoint.com/rust/rust_string.htm
Rust의 String 데이터 유형은 다음 두 가지로 분류
문자열 리터럴(&str)은 컴파일 타임에 문자열 값을 알 때 사용
문자열 리터럴은 변수에 하드코딩된 문자 집합
fn main() {
let company:&str="TutorialsPoint";
let location:&str = "Hyderabad";
println!("company is : {} location :{}",company,location);
}
문자열 객체 형식은 표준 라이브러리에서 제공
문자열 리터럴과 달리 문자열 개체 유형은 언어 코어의 일부가 아님
표준 라이브러리 pub struct String에 public 구조체로 정의
문자열 객체는 길이가 늘어날 수 있는 컬렉션 객체
변경이 가능하고 UTF-8로 인코딩
런타임에 사용되는 문자열에 사용 가능
힙에 할당됨
빈 문자열 생성
String::new()
문자열 복사
String::from()
fn main(){
let empty_string = String::new();
println!("length is {}",empty_string.len());
let content_string = String::from("TutorialsPoint");
println!("length is {}",content_string.len());
}
Sr.No. | Method | Signature | Description |
---|---|---|---|
1 | new() | pub const fn new() -> String | 빈 문자열 생성 |
2 | to_string() | fn to_string(&self) -> String | 주어진 값을 문자열로 변환 |
3 | replace() | pub fn replace<'a,P>(&'a self, from: P, to: &str) -> String | 패턴의 모든 일치 항목을 다른 문자열로 변환 |
4 | as_str() | pub fn as_str(&self) -> &str | 전체 문자열을 포함하는 문자열 조각을 추출 |
5 | push() | pub fn push(&mut self, ch: char) | 주어진 char를 문자열 끝에 추가 |
6 | push_str() | pub fn push_str(&mut self, string: &str) | 문자열 끝에 주어진 문자열 추가 |
7 | len() | pub fn len(&self) -> usize | 문자열의 길이(byte 단위) |
8 | trim() | pub fn trim(&self) -> &str | 전/후 공백이 제거된 문자열 반환 |
9 | split_whitespace() | pub fn split)whitespace(&self) -> SplitWhitesapce | 문자열 을 공백으로 분할하고 반복자를 반환 |
10 | split() | pub fn split<'a, P>(&'a self, pat: P) -> Split<'a, P> | P는 패턴이 &str, char 또는 분할을 결정하는 클로저일 수 있 |
11 | chars() | pub fn chars(&self) -> Chars | 문자열의 문자에 대한 반복자를 반환 |
new() 함수는 빈 문자열을 생성
fn main(){
let mut z = String::new();
z.push_str("hello");
println!("{}",z);
}
String 객체의 모든 메서드에 액세스하려면 to_string() 함수를 사용하여 문자열 리터럴을 객체 유형으로 변환
fn main(){
let name1 = "Hello TutorialsPoint ,
Hello!".to_string();
println!("{}",name1);
}
replace() 함수는 두 개의 매개변수를 취함
첫 번째 매개변수는 검색할 문자열 패턴
두 번째 매개변수는 교체할 새 값
fn main(){
let name1 = "Hello TutorialsPoint ,
Hello!".to_string(); //String object
let name2 = name1.replace("Hello","Howdy"); //find and replace
println!("{}",name2);
}
as_str() 함수는 전체 문자열을 포함하는 문자열 슬라이스를 추출
fn main() {
let example_string = String::from("example_string");
print_literal(example_string.as_str());
}
fn print_literal(data:&str ){
println!("displaying string literal {}",data);
}
push() 함수는 주어진 char를 이 문자열의 끝에 추가
fn main(){
let mut company = "Tutorial".to_string();
company.push('s');
println!("{}",company);
}
push_str() 함수는 주어진 문자열 슬라이스를 문자열 끝에 추가
len() 함수는 문자열의 총 문자 수(공백 포함) 반환
trim() 함수는 문자열에서 선행 및 후행 공백을 제거
인라인 공백은 제거하지 않음
fn main() {
let fullname = " Tutorials Point \r\n";
println!("Before trim ");
println!("length is {}",fullname.len());
println!();
println!("After trim ");
println!("length is {}",fullname.trim().len());
}
split_whitespace() 함수는 입력 문자열을 다른 문자열로 분할하여 반복자를 반환
fn main(){
let msg = "Tutorials Point has good t
utorials".to_string();
let mut i = 1;
for token in msg.split_whitespace(){
println!("token {} {}",i,token);
i+=1;
}
}
split() 함수는 패턴과 일치하는 문자로 구분된 문자열 슬라이스의 하위 문자열에 대한 반복자를 반환
split() 함수의 제한 사항은 나중에 사용하기 위해 결과를 저장할 수 없다
collect 함수를 사용하여 split()이 반환한 결과를 벡터로 저장
fn main() {
let fullname = "Kannan,Sudhakaran,Tutorialspoint";
for token in fullname.split(","){
println!("token is {}",token);
}
//store in a Vector
println!("\n");
let tokens:Vec<&str>= fullname.split(",").collect();
println!("firstName is {}",tokens[0]);
println!("lastname is {}",tokens[1]);
println!("company is {}",tokens[2]);
}
문자열의 개별 문자는 chars 메서드를 사용하여 액세스
fn main(){
let n1 = "Tutorials".to_string();
for n in n1.chars(){
println!("{}",n);
}
}
문자열 값은 다른 문자열에 추가될 수 있음
문자열 연결의 결과는 새 문자열 개체
+연산자는 내부적으로 add 메서드를 사용
//add function
add(self,&str)->String {
// returns a String object
}
fn main(){
let n1 = "Tutorials".to_string();
let n2 = "Point".to_string();
let n3 = n1 + &n2; // n2 reference is passed
println!("{}",n3);
}
fn main(){
let number = 2020;
let number_as_string = number.to_string();
// convert number to string
println!("{}",number_as_string);
println!("{}",number_as_string=="2020");
}
String 객체에 함께 추가하는 또 다른 방법은 format이라는 매크로 함수를 사용
fn main(){
let n1 = "Tutorials".to_string();
let n2 = "Point".to_string();
let n3 = format!("{} {}",n1,n2);
println!("{}",n3);
}