Ó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