Óxido - Cuerda

El tipo de datos String en Rust se puede clasificar en lo siguiente:

  • Cadena literal(&str)

  • Objeto de cadena(String)

Cadena literal

Los literales de cadena (& str) se utilizan cuando se conoce el valor de una cadena en tiempo de compilación. Los literales de cadena son un conjunto de caracteres, que están codificados en una variable. Por ejemplo, let company = "Tutorials Point" . Los literales de cadena se encuentran en el módulo std :: str. Los literales de cadena también se conocen como segmentos de cadena.

El siguiente ejemplo declara dos cadenas literales: empresa y ubicación .

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

Los literales de cadena son estáticos de forma predeterminada. Esto significa que se garantiza que los literales de cadena sean válidos durante todo el programa. También podemos especificar explícitamente la variable como estática como se muestra a continuación:

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

El programa anterior generará la siguiente salida:

company is : TutorialsPoint location :Hyderabad

Objeto de cadena

El tipo de objeto String se proporciona en la biblioteca estándar. A diferencia del literal de cadena, el tipo de objeto de cadena no es parte del lenguaje principal. Se define como estructura pública en la cadena de estructura de publicación de biblioteca estándar . String es una colección que se puede cultivar. Es de tipo mutable y codificado en UTF-8. losStringEl tipo de objeto se puede utilizar para representar valores de cadena que se proporcionan en tiempo de ejecución. El objeto de cadena se asigna en el montón.

Sintaxis

Para crear un objeto String, podemos usar cualquiera de la siguiente sintaxis:

String::new()

La sintaxis anterior crea una cadena vacía

String::from()

Esto crea una cadena con algún valor predeterminado pasado como parámetro al from() método.

El siguiente ejemplo ilustra el uso de un objeto 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());
}

El ejemplo anterior crea dos cadenas: un objeto de cadena vacío usando el nuevo método y un objeto de cadena de literal de cadena usando el método from .

La salida es la que se muestra a continuación:

length is 0
length is 14

Métodos comunes: objeto de cadena

No Señor. Método Firma Descripción
1 nuevo() pub const fn new () → Cadena Crea una nueva cadena vacía.
2 Encadenar() fn to_string (& self) → Cadena Convierte el valor dado en una cadena.
3 reemplazar() pub fn reemplazar <'a, P> (&' a self, de: P, a: & str) → Cadena Reemplaza todas las coincidencias de un patrón con otra cuerda.
4 as_str () pub fn as_str (& self) → & str Extrae un segmento de cadena que contiene toda la cadena.
5 empujar() pub fn push (& mut self, ch: char) Agrega el carácter dado al final de esta Cadena.
6 push_str () pub fn push_str (& mut self, string: & str) Agrega un segmento de cadena determinado al final de esta cadena.
7 len () pub fn len (& self) → usar Devuelve la longitud de esta cadena, en bytes.
8 podar() pub fn recortar (& self) → & str Devuelve un segmento de cadena con los espacios en blanco iniciales y finales eliminados.
9 split_whitespace () pub fn split_whitespace (& self) → SplitWhitespace Divide un segmento de cadena por espacios en blanco y devuelve un iterador.
10 división() pub fn split <'a, P> (&' a self, pat: P) → Split <'a, P>, donde P es el patrón puede ser & str, char o un cierre que determina la división. Devuelve un iterador sobre subcadenas de este segmento de cadena, separadas por caracteres que coinciden con un patrón.
11 caracteres () pub fn chars (& self) → Chars Devuelve un iterador sobre los caracteres de un segmento de cadena.

Ilustración: nuevo ()

Un objeto de cadena vacío se crea usando el new()método y su valor se establece en hola .

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

Salida

El programa anterior genera la siguiente salida:

hello

Ilustración: to_string ()

Para acceder a todos los métodos del objeto String, convierta un literal de cadena al tipo de objeto usando el to_string() función.

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

Salida

El programa anterior genera la siguiente salida:

Hello TutorialsPoint , Hello!

Ilustración: reemplazar ()

los replace()La función toma dos parámetros: el primer parámetro es un patrón de cadena para buscar y el segundo parámetro es el nuevo valor a reemplazar. En el ejemplo anterior, Hello aparece dos veces en la cadena name1 .

La función reemplazar reemplaza todas las apariciones de la cadena 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);
}

Salida

El programa anterior genera la siguiente salida:

Howdy TutorialsPoint , Howdy!

Ilustración: as_str ()

los as_str() La función extrae un segmento de cadena que contiene toda la cadena.

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

Salida

El programa anterior genera la siguiente salida:

displaying string literal example_string

Ilustración: empujar ()

los push() La función agrega el carácter dado al final de esta Cadena.

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

Salida

El programa anterior genera la siguiente salida:

Tutorials

Ilustración: push_str ()

los push_str() La función agrega un segmento de cadena determinado al final de una cadena.

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

Salida

El programa anterior genera la siguiente salida:

Tutorials Point

Ilustración: len ()

los len() La función devuelve el número total de caracteres en una cadena (incluidos los espacios).

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

Salida

El programa anterior genera la siguiente salida:

length is 20

Ilustración: recortar ()

La función trim () elimina los espacios iniciales y finales de una cadena. TENGA EN CUENTA que esta función no eliminará los espacios en línea.

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

Salida

El programa anterior genera la siguiente salida:

Before trim
length is 24

After trim
length is 15

Ilustración: split_whitespace ()

los split_whitespace()divide la cadena de entrada en diferentes cadenas. Devuelve un iterador, por lo que estamos iterando a través de los tokens como se muestra a continuación:

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

Salida

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

Ilustración: cadena dividida ()

los split() stringEl método devuelve un iterador sobre subcadenas de un segmento de cadena, separado por caracteres que coinciden con un patrón. La limitación del método split () es que el resultado no se puede almacenar para su uso posterior. loscollect El método se puede utilizar para almacenar el resultado devuelto por split () como un 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]);
}

El ejemplo anterior divide la cadena fullname, siempre que encuentre una coma (,).

Salida

token is Kannan
token is Sudhakaran
token is Tutorialspoint

firstName is Kannan
lastname is Sudhakaran
company is Tutorialspoint

Ilustración: chars ()

Se puede acceder a los caracteres individuales de una cadena mediante el método chars. Consideremos un ejemplo para entender esto.

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

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

Salida

T
u
t
o
r
i
a
l
s

Concatenación de cadenas con operador +

Se puede agregar un valor de cadena a otra cadena. A esto se le llama concatenación o interpolación. El resultado de la concatenación de cadenas es un nuevo objeto de cadena. El operador + utiliza internamente un método de adición . La sintaxis de la función de suma toma dos parámetros. El primer parámetro es self : el objeto de cadena en sí mismo y el segundo parámetro es una referencia del segundo objeto de cadena. Esto se muestra a continuación:

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

Ilustración: Concatenación de cadenas

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

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

La salida será como se indica a continuación

TutorialsPoint

Ilustración: Tipo Casting

El siguiente ejemplo ilustra la conversión de un número en un objeto de cadena:

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

La salida será como se indica a continuación

2020
true

Ilustración: ¡Formato! Macro

Otra forma de agregar objetos a String juntos es usando una función de macro llamada formato. El uso de Format! es como se muestra a continuación.

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

La salida será como se indica a continuación

Tutorials Point