Ruggine - String

Il tipo di dati String in Rust può essere classificato come segue:

  • String Literal(&str)

  • Oggetto stringa(String)

String Literal

I valori letterali stringa (& str) vengono utilizzati quando il valore di una stringa è noto in fase di compilazione. I letterali stringa sono un insieme di caratteri, che sono codificati in una variabile. Ad esempio, let company = "Tutorials Point" . I valori letterali stringa si trovano nel modulo std :: str. Le stringhe letterali sono anche note come sezioni di stringa.

L'esempio seguente dichiara due stringhe letterali: azienda e posizione .

fn main() {
   let company:&str="TutorialsPoint";
   let location:&str = "Hyderabad";
   println!("company is : {} location :{}",company,location);
}

I valori letterali stringa sono statici per impostazione predefinita. Ciò significa che le stringhe letterali sono garantite per essere valide per la durata dell'intero programma. Possiamo anche specificare esplicitamente la variabile come statica come mostrato di seguito -

fn main() {
   let company:&'static str = "TutorialsPoint";
   let location:&'static str = "Hyderabad";
   println!("company is : {} location :{}",company,location);
}

Il programma sopra genererà il seguente output:

company is : TutorialsPoint location :Hyderabad

Oggetto stringa

Il tipo di oggetto String viene fornito nella libreria standard. A differenza del valore letterale stringa, il tipo di oggetto stringa non fa parte del linguaggio principale. È definito come struttura pubblica nella libreria standard pub struct String . String è una collezione coltivabile. È di tipo mutabile e codificato UTF-8. IlStringil tipo di oggetto può essere utilizzato per rappresentare i valori stringa forniti in fase di esecuzione. L'oggetto stringa viene allocato nell'heap.

Sintassi

Per creare un oggetto String, possiamo utilizzare una delle seguenti sintassi:

String::new()

La sintassi precedente crea una stringa vuota

String::from()

Questo crea una stringa con un valore predefinito passato come parametro al file from() metodo.

L'esempio seguente illustra l'uso di un oggetto 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());
}

L'esempio precedente crea due stringhe: un oggetto stringa vuoto utilizzando il nuovo metodo e un oggetto stringa dal valore letterale stringa utilizzando il metodo from .

L'output è come mostrato di seguito:

length is 0
length is 14

Metodi comuni - Oggetto stringa

Sr.No. Metodo Firma Descrizione
1 nuovo() pub const fn new () → String Crea una nuova stringa vuota.
2 accordare() fn to_string (& self) → String Converte il valore specificato in una stringa.
3 sostituire() pub fn sostituisce <'a, P> (&' a self, from: P, to: & str) → String Sostituisce tutte le corrispondenze di un pattern con un'altra stringa.
4 as_str () pub fn as_str (& self) → & str Estrae una sezione di stringa contenente l'intera stringa.
5 Spingere() pub fn push (& mut self, ch: char) Aggiunge il carattere specificato alla fine di questa stringa.
6 push_str () pub fn push_str (& mut self, string: & str) Aggiunge una data porzione di stringa alla fine di questa stringa.
7 len () pub fn len (& self) → usize Restituisce la lunghezza di questa stringa, in byte.
8 trim () pub fn trim (& self) → & str Restituisce una sezione di stringa con spazi bianchi iniziali e finali rimossi.
9 split_whitespace () pub fn split_whitespace (& self) → SplitWhitespace Divide una sezione di stringa per spazi bianchi e restituisce un iteratore.
10 Diviso() pub fn split <'a, P> (&' a self, pat: P) → Split <'a, P>, dove P è il pattern può essere & str, char o una chiusura che determina la divisione. Restituisce un iteratore su sottostringhe di questa porzione di stringa, separate da caratteri corrispondenti a un modello.
11 caratteri () pub fn chars (& self) → Chars Restituisce un iteratore sui caratteri di una porzione di stringa.

Illustrazione: new ()

Un oggetto stringa vuoto viene creato utilizzando il new()e il suo valore è impostato su hello .

fn main(){
   let mut z = String::new();
   z.push_str("hello");
   println!("{}",z);
}

Produzione

Il programma di cui sopra genera il seguente output:

hello

Illustrazione: to_string ()

Per accedere a tutti i metodi dell'oggetto String, converti un valore letterale stringa in un tipo di oggetto utilizzando l'estensione to_string() funzione.

fn main(){
   let name1 = "Hello TutorialsPoint , 
   Hello!".to_string();
   println!("{}",name1);
}

Produzione

Il programma di cui sopra genera il seguente output:

Hello TutorialsPoint , Hello!

Illustrazione: sostituire ()

Il replace()funzione accetta due parametri: il primo parametro è uno schema di stringhe da cercare e il secondo parametro è il nuovo valore da sostituire. Nell'esempio precedente, Hello appare due volte nella stringa name1 .

La funzione di sostituzione sostituisce tutte le occorrenze della stringa Hello con Howdy.

fn main(){
   let name1 = "Hello TutorialsPoint , 
   Hello!".to_string();         //String object
   let name2 = name1.replace("Hello","Howdy");    //find and replace
   println!("{}",name2);
}

Produzione

Il programma di cui sopra genera il seguente output:

Howdy TutorialsPoint , Howdy!

Illustrazione: as_str ()

Il as_str() la funzione estrae una sezione di stringa contenente l'intera stringa.

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);
}

Produzione

Il programma di cui sopra genera il seguente output:

displaying string literal example_string

Illustrazione: push ()

Il push() la funzione aggiunge il carattere specificato alla fine di questa stringa.

fn main(){
   let mut company = "Tutorial".to_string();
   company.push('s');
   println!("{}",company);
}

Produzione

Il programma di cui sopra genera il seguente output:

Tutorials

Illustrazione: push_str ()

Il push_str() la funzione aggiunge una determinata porzione di stringa alla fine di una stringa.

fn main(){
   let mut company = "Tutorials".to_string();
   company.push_str(" Point");
   println!("{}",company);
}

Produzione

Il programma di cui sopra genera il seguente output:

Tutorials Point

Illustrazione: len ()

Il len() la funzione restituisce il numero totale di caratteri in una stringa (inclusi gli spazi).

fn main() {
   let fullname = " Tutorials Point";
   println!("length is {}",fullname.len());
}

Produzione

Il programma di cui sopra genera il seguente output:

length is 20

Illustrazione: trim ()

La funzione trim () rimuove gli spazi iniziali e finali in una stringa. NOTA che questa funzione non rimuoverà gli spazi inline.

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());
}

Produzione

Il programma di cui sopra genera il seguente output:

Before trim
length is 24

After trim
length is 15

Illustrazione: split_whitespace ()

Il split_whitespace()divide la stringa di input in stringhe diverse. Restituisce un iteratore, quindi stiamo iterando i token come mostrato di seguito -

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;
   }
}

Produzione

token 1 Tutorials
token 2 Point
token 3 has
token 4 good
token 5 tutorials

Illustrazione: stringa divisa ()

Il split() stringrestituisce un iteratore su sottostringhe di una sezione di stringa, separate da caratteri corrispondenti a un modello. La limitazione del metodo split () è che il risultato non può essere memorizzato per un uso successivo. Ilcollect può essere utilizzato per memorizzare il risultato restituito da split () come vettore.

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]);
}

L'esempio sopra divide la stringa fullname, ogni volta che incontra una virgola (,).

Produzione

token is Kannan
token is Sudhakaran
token is Tutorialspoint

firstName is Kannan
lastname is Sudhakaran
company is Tutorialspoint

Illustrazione: chars ()

È possibile accedere ai singoli caratteri in una stringa utilizzando il metodo chars. Consideriamo un esempio per capirlo.

fn main(){
   let n1 = "Tutorials".to_string();

   for n in n1.chars(){
      println!("{}",n);
   }
}

Produzione

T
u
t
o
r
i
a
l
s

Concatenazione di stringhe con l'operatore +

Un valore stringa può essere aggiunto a un'altra stringa. Questa è chiamata concatenazione o interpolazione. Il risultato della concatenazione di stringhe è un nuovo oggetto stringa. L'operatore + utilizza internamente un metodo add . La sintassi della funzione add accetta due parametri. Il primo parametro è self - l'oggetto stringa stesso e il secondo parametro è un riferimento del secondo oggetto stringa. Questo è mostrato di seguito -

//add function
add(self,&str)->String { 
   // returns a String object
}

Illustrazione: concatenazione di stringhe

fn main(){
   let n1 = "Tutorials".to_string();
   let n2 = "Point".to_string();

   let n3 = n1 + &n2; // n2 reference is passed
   println!("{}",n3);
}

L'output sarà come indicato di seguito

TutorialsPoint

Illustrazione: tipo Casting

L'esempio seguente illustra la conversione di un numero in un oggetto stringa:

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");
}

L'output sarà come indicato di seguito

2020
true

Illustrazione: formato! Macro

Un altro modo per aggiungere oggetti String insieme è usare una funzione macro chiamata format. L'uso di Format! è come mostrato di seguito.

fn main(){
   let n1 = "Tutorials".to_string();
   let n2 = "Point".to_string();
   let n3 = format!("{} {}",n1,n2);
   println!("{}",n3);
}

L'output sarà come indicato di seguito

Tutorials Point