De la documentación , no está claro. En Java podría usar el splitmétodo de esta manera:
"some string 123 ffd".split("123");
De la documentación , no está claro. En Java podría usar el splitmétodo de esta manera:
"some string 123 ffd".split("123");
Splity configurarlo en la matriz. Por supuesto, esto significa que el número de elementos en cada división debe ser el mismo, ya que las matrices tienen un tamaño fijo y debe tener la matriz definida anteriormente. Me imagino que esto puede ser más problemático que simplemente crear unVec.Respuestas:
Utilizar
split()Esto le da un iterador, que puede recorrer o
collect()en un vector.fuente
.collect::<Vec<_>>().let split?split.len()no existe.count().len()es solo para iteradores que conocen su tamaño exacto sin necesidad de ser consumidos,count()consume el iterador.error: cannot borrow immutable local variablesplit` as mutable`let mut split, lo siento.Hay tres formas simples:
Por separador :
Por espacios en blanco :
Por nuevas líneas :
El resultado de cada tipo es un iterador:
fuente
Hay un método especial
splitpara structString:Dividido por char:
Dividir por cadena:
Dividir por cierre:
fuente
splitdevuelve unaIterator, que se puede convertir en unVecusandocollect:split_line.collect::<Vec<_>>(). Pasar por un iterador en lugar de devolver unVecdirectamente tiene varias ventajas:splites perezoso. Esto significa que realmente no dividirá la línea hasta que la necesite. De esa manera no va a perder el tiempo de la división toda la cadena si sólo necesita los primeros valores:split_line.take(2).collect::<Vec<_>>(), o incluso si sólo necesita el primer valor que se puede convertir en un entero:split_line.filter_map(|x| x.parse::<i32>().ok()).next(). Este último ejemplo no perderá tiempo intentando procesar el "23.0" pero detendrá el procesamiento inmediatamente una vez que encuentre el "1".splitno asume la forma en que desea almacenar el resultado. Puede usar aVec, pero también puede usar cualquier cosa que implementeFromIterator<&str>, por ejemplo aLinkedListo aVecDeque, o cualquier tipo personalizado que implementeFromIterator<&str>.fuente
let x = line.unwrap().split(",").collect::<Vec<_>>();no funciona a menos que esté separada en dos líneas separadas:let x = line.unwrap();ylet x = x.split(",").collect::<Vec<_>>();? El mensaje de error dice:temporary value created here ^ temporary value dropped here while still borrowedlet x = line.as_ref().unwrap().split(",").collect::<Vec<_>>();También hay
split_whitespace()fuente