Rust - Chuỗi
Kiểu dữ liệu chuỗi trong Rust có thể được phân loại thành như sau:
Chuỗi chữ(&str)
Đối tượng chuỗi(String)
Chuỗi chữ
Chuỗi ký tự (& str) được sử dụng khi giá trị của chuỗi được biết tại thời điểm biên dịch. Chuỗi ký tự là một tập hợp các ký tự, được mã hóa cứng thành một biến. Ví dụ: let company = "Tutorials Point" . Chuỗi ký tự được tìm thấy trong mô-đun std :: str. Các ký tự chuỗi còn được gọi là các lát chuỗi.
Ví dụ sau khai báo hai chuỗi ký tự - công ty và vị trí .
fn main() {
let company:&str="TutorialsPoint";
let location:&str = "Hyderabad";
println!("company is : {} location :{}",company,location);
}
Các ký tự chuỗi là tĩnh theo mặc định. Điều này có nghĩa là các ký tự chuỗi được đảm bảo có giá trị trong suốt thời gian của toàn bộ chương trình. Chúng ta cũng có thể chỉ định rõ ràng biến là static như hình dưới đây:
fn main() {
let company:&'static str = "TutorialsPoint";
let location:&'static str = "Hyderabad";
println!("company is : {} location :{}",company,location);
}
Chương trình trên sẽ tạo ra kết quả sau:
company is : TutorialsPoint location :Hyderabad
Đối tượng chuỗi
Kiểu đối tượng Chuỗi được cung cấp trong Thư viện Chuẩn. Không giống như chuỗi ký tự, kiểu đối tượng chuỗi không phải là một phần của ngôn ngữ cốt lõi. Nó được định nghĩa là cấu trúc công khai trong thư viện chuẩn pub struct String . Chuỗi là một tập hợp có thể phát triển. Nó là loại có thể thay đổi và được mã hóa UTF-8. CácStringkiểu đối tượng có thể được sử dụng để biểu diễn các giá trị chuỗi được cung cấp trong thời gian chạy. Đối tượng chuỗi được cấp phát trong heap.
Cú pháp
Để tạo một đối tượng String, chúng ta có thể sử dụng bất kỳ cú pháp nào sau đây:
String::new()
Cú pháp trên tạo một chuỗi trống
String::from()
Điều này tạo ra một chuỗi với một số giá trị mặc định được truyền làm tham số cho from() phương pháp.
Ví dụ sau minh họa việc sử dụng đối tượng String.
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());
}
Ví dụ trên tạo hai chuỗi - một đối tượng chuỗi rỗng sử dụng phương thức mới và một đối tượng chuỗi từ chuỗi ký tự bằng cách sử dụng phương thức from .
Đầu ra như hình dưới đây -
length is 0
length is 14
Các phương thức chung - Đối tượng chuỗi
Sr.No. | phương pháp | Chữ ký | Sự miêu tả |
---|---|---|---|
1 | Mới() | pub const fn new () → Chuỗi | Tạo một chuỗi trống mới. |
2 | to_string () | fn to_string (& self) → Chuỗi | Chuyển đổi giá trị đã cho thành Chuỗi. |
3 | thay thế() | pub fn thay thế <'a, P> (&' a self, from: P, to: & str) → String | Thay thế tất cả các kết quả khớp của một mẫu bằng một chuỗi khác. |
4 | as_str () | pub fn as_str (& self) → & str | Trích xuất một lát chuỗi chứa toàn bộ chuỗi. |
5 | đẩy() | pub fn push (& mut self, ch: char) | Nối các char đã cho vào cuối Chuỗi này. |
6 | push_str () | pub fn push_str (& mut self, string: & str) | Thêm một lát chuỗi đã cho vào phần cuối của Chuỗi này. |
7 | len () | pub fn len (& self) → usize | Trả về độ dài của Chuỗi này, tính bằng byte. |
số 8 | trim () | pub fn trim (& self) → & str | Trả về một lát chuỗi đã xóa bỏ khoảng trắng ở đầu và cuối. |
9 | split_whitespace () | pub fn split_whitespace (& self) → SplitWhitespace | Tách một lát chuỗi theo khoảng trắng và trả về một trình lặp. |
10 | tách () | pub fn split <'a, P> (&' a self, pat: P) → Split <'a, P>, trong đó P là mẫu có thể là & str, char hoặc một bao đóng xác định sự phân tách. | Trả về một trình lặp trên các chuỗi con của lát chuỗi này, được phân tách bằng các ký tự được so khớp bởi một mẫu. |
11 | ký tự () | ký tự pub fn (& self) → Các ký tự | Trả về một trình lặp trên các ký tự của một lát chuỗi. |
Hình minh họa: new ()
Một đối tượng chuỗi rỗng được tạo bằng cách sử dụng new()và giá trị của nó được đặt thành hello .
fn main(){
let mut z = String::new();
z.push_str("hello");
println!("{}",z);
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
hello
Hình minh họa: to_string ()
Để truy cập tất cả các phương thức của đối tượng Chuỗi, hãy chuyển đổi một chuỗi ký tự thành kiểu đối tượng bằng cách sử dụng to_string() chức năng.
fn main(){
let name1 = "Hello TutorialsPoint ,
Hello!".to_string();
println!("{}",name1);
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
Hello TutorialsPoint , Hello!
Hình minh họa: Replace ()
Các replace()hàm nhận hai tham số - tham số đầu tiên là một mẫu chuỗi để tìm kiếm và tham số thứ hai là giá trị mới được thay thế. Trong ví dụ trên, Hello xuất hiện hai lần trong chuỗi name1 .
Hàm thay thế thay thế tất cả các lần xuất hiện của chuỗi Hello với Howdy.
fn main(){
let name1 = "Hello TutorialsPoint ,
Hello!".to_string(); //String object
let name2 = name1.replace("Hello","Howdy"); //find and replace
println!("{}",name2);
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
Howdy TutorialsPoint , Howdy!
Hình minh họa: as_str ()
Các as_str() hàm trích xuất một lát chuỗi chứa toàn bộ chuỗi.
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);
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
displaying string literal example_string
Minh họa: push ()
Các push() hàm nối các ký tự đã cho vào cuối Chuỗi này.
fn main(){
let mut company = "Tutorial".to_string();
company.push('s');
println!("{}",company);
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
Tutorials
Hình minh họa: push_str ()
Các push_str() hàm nối một lát chuỗi đã cho vào phần cuối của một Chuỗi.
fn main(){
let mut company = "Tutorials".to_string();
company.push_str(" Point");
println!("{}",company);
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
Tutorials Point
Hình minh họa: len ()
Các len() hàm trả về tổng số ký tự trong một chuỗi (bao gồm cả dấu cách).
fn main() {
let fullname = " Tutorials Point";
println!("length is {}",fullname.len());
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
length is 20
Hình minh họa: trim ()
Hàm trim () loại bỏ các khoảng trống ở đầu và cuối trong một chuỗi. LƯU Ý rằng hàm này sẽ không loại bỏ các khoảng trắng nội tuyến.
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());
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
Before trim
length is 24
After trim
length is 15
Hình minh họa: split_whitespace ()
Các split_whitespace()chia chuỗi đầu vào thành các chuỗi khác nhau. Nó trả về một trình lặp, vì vậy chúng tôi đang lặp qua các mã thông báo như được hiển thị bên dưới:
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;
}
}
Đầu ra
token 1 Tutorials
token 2 Point
token 3 has
token 4 good
token 5 tutorials
Minh họa: chuỗi split ()
Các split() stringphương thức trả về một trình lặp trên các chuỗi con của một lát chuỗi, được phân tách bằng các ký tự được khớp bởi một mẫu. Hạn chế của phương thức split () là không thể lưu trữ kết quả để sử dụng sau này. Cáccollect phương thức có thể được sử dụng để lưu trữ kết quả được trả về bởi split () dưới dạng một vector.
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]);
}
Ví dụ trên chia nhỏ chuỗi fullname, bất cứ khi nào nó gặp dấu phẩy (,).
Đầu ra
token is Kannan
token is Sudhakaran
token is Tutorialspoint
firstName is Kannan
lastname is Sudhakaran
company is Tutorialspoint
Hình minh họa: chars ()
Các ký tự riêng lẻ trong một chuỗi có thể được truy cập bằng phương thức ký tự. Chúng ta hãy xem xét một ví dụ để hiểu điều này.
fn main(){
let n1 = "Tutorials".to_string();
for n in n1.chars(){
println!("{}",n);
}
}
Đầu ra
T
u
t
o
r
i
a
l
s
Nối chuỗi với toán tử +
Một giá trị chuỗi có thể được nối vào một chuỗi khác. Đây được gọi là nối hoặc nội suy. Kết quả của việc nối chuỗi là một đối tượng chuỗi mới. Toán tử + sử dụng nội bộ một phương thức thêm . Cú pháp của hàm add có hai tham số. Tham số đầu tiên là self - chính đối tượng chuỗi và tham số thứ hai là một tham chiếu của đối tượng chuỗi thứ hai. Điều này được hiển thị bên dưới -
//add function
add(self,&str)->String {
// returns a String object
}
Minh họa: Nối chuỗi
fn main(){
let n1 = "Tutorials".to_string();
let n2 = "Point".to_string();
let n3 = n1 + &n2; // n2 reference is passed
println!("{}",n3);
}
Đầu ra sẽ như dưới đây
TutorialsPoint
Minh họa: Kiểu Đúc
Ví dụ sau minh họa việc chuyển đổi một số thành một đối tượng chuỗi:
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");
}
Đầu ra sẽ như dưới đây
2020
true
Hình minh họa: Định dạng! Macro
Một cách khác để thêm vào các đối tượng Chuỗi với nhau là sử dụng một hàm macro được gọi là định dạng. Việc sử dụng Định dạng! như hình dưới đây.
fn main(){
let n1 = "Tutorials".to_string();
let n2 = "Point".to_string();
let n3 = format!("{} {}",n1,n2);
println!("{}",n3);
}
Đầu ra sẽ như dưới đây
Tutorials Point