traduccion ps4 lenguaje language juego rust

ps4 - rust traduccion



¿Cómo puedo dividir una cadena en Rust? (5)

De la documentation , no está claro. En Java, puedes usar el método de split así:

"some string 123 ffd".split("123");


Hay tres formas simples:

  1. Por separador :

    s.split("separator")

  2. Por espacio en blanco :

    s.split_whitespace()

  3. Por nuevas líneas

    s.lines()

El resultado de cada clase es un iterador:

let text = "foo/r/nbar/n/nbaz/n"; let mut lines = text.lines(); assert_eq!(Some("foo"), lines.next()); assert_eq!(Some("bar"), lines.next()); assert_eq!(Some(""), lines.next()); assert_eq!(Some("baz"), lines.next()); assert_eq!(None, lines.next());


Hay un método especial split para struct String :

fn split<''a, P>(&''a self, pat: P) -> Split<''a, P> where P: Pattern<''a>

Dividir por char:

let v: Vec<&str> = "Mary had a little lamb".split('' '').collect(); assert_eq!(v, ["Mary", "had", "a", "little", "lamb"]);

Dividir por cadena:

let v: Vec<&str> = "lion::tiger::leopard".split("::").collect(); assert_eq!(v, ["lion", "tiger", "leopard"]);

Split por cierre:

let v: Vec<&str> = "abc1def2ghi".split(|c: char| c.is_numeric()).collect(); assert_eq!(v, ["abc", "def", "ghi"]);


También hay split_whitespace()

fn main() { let words: Vec<&str> = " foo bar/t/nbaz ".split_whitespace().collect(); println!("{:?}", words); // ["foo", "bar", "baz"] }


Usa split()

let mut split = "some string 123 ffd".split("123");

Esto le da un iterador, que puede recorrer, o collect() en un vector.

for s in split { println!("{}", s) } let vec = split.collect::<Vec<&str>>(); // OR let vec: Vec<&str> = split.collect();


split devuelve un Iterator , que puede convertir en un Vec utilizando collect : split_line.collect::<Vec<_>>() . Pasar por un iterador en lugar de devolver un Vec directamente tiene varias ventajas:

  • split es floja. Esto significa que realmente no dividirá la línea hasta que la necesite. De esta manera, no perderá tiempo dividiendo toda la cadena si solo necesita los primeros valores: split_line.take(2).collect::<Vec<_>>() , o incluso si solo necesita el primer valor que se puede convertir a un número entero: split_line.filter_map(|x| x.parse::<i32>().ok()).next() . Este último ejemplo no perderá tiempo intentando procesar el "23.0" pero dejará de procesarse inmediatamente una vez que encuentre el "1".
  • split no presupone la forma en que desea almacenar el resultado. Puede usar un Vec , pero también puede usar cualquier cosa que implemente FromIterator<&str> , por ejemplo, una LinkedList o un VecDeque , o cualquier tipo personalizado que implemente FromIterator<&str> .