A partir da documentação , não está claro. Em Java, você pode usar o split
método da seguinte maneira:
"some string 123 ffd".split("123");
A partir da documentação , não está claro. Em Java, você pode usar o split
método da seguinte maneira:
"some string 123 ffd".split("123");
Split
e configurá-lo na matriz. Obviamente, isso significa que o número de itens em cada divisão deve ser o mesmo, pois as matrizes são de tamanho fixo e você deve ter a matriz definida antes. Eu imagino que isso possa ser mais problemático do que simplesmente criar umVec
.Respostas:
Usar
split()
Isso fornece um iterador, no qual você pode fazer um loop ou
collect()
em um vetor.fonte
.collect::<Vec<_>>()
.let split
?split.len()
não existe..count()
.len()
é apenas para iteradores que sabem seu tamanho exato sem precisar ser consumidos,count()
consome o iterador.error: cannot borrow immutable local variable
split` como mutable`let mut split
, desculpe.Existem três maneiras simples:
Pelo separador :
Por espaço em branco :
Por novas linhas :
O resultado de cada tipo é um iterador:
fonte
Existe um método especial
split
para structString
:Dividido por caracteres:
Dividido por sequência:
Dividir por fechamento:
fonte
split
retorna umaIterator
, que você pode converter em umVec
usandocollect
:split_line.collect::<Vec<_>>()
. Passar por um iterador em vez de retornar umVec
diretamente tem várias vantagens:split
é preguiçoso. Isso significa que ele realmente não vai dividir a linha até que você precise. Dessa forma, ele não vai perder divisão tempo todo a corda se você só precisa os primeiros valores:split_line.take(2).collect::<Vec<_>>()
ou mesmo se você precisar apenas o primeiro valor que pode ser convertido para um inteiro:split_line.filter_map(|x| x.parse::<i32>().ok()).next()
. Este último exemplo não perderá tempo tentando processar o "23.0", mas interromperá o processamento imediatamente quando encontrar o "1".split
não assume como você deseja armazenar o resultado. Você pode usar aVec
, mas também pode usar qualquer coisa que implementeFromIterator<&str>
, por exemplo, aLinkedList
ou aVecDeque
, ou qualquer tipo personalizado que implementeFromIterator<&str>
.fonte
let x = line.unwrap().split(",").collect::<Vec<_>>();
que não funciona, a menos que seja separada em duas linhas separadas:let x = line.unwrap();
elet x = x.split(",").collect::<Vec<_>>();
? A mensagem de erro diz:temporary value created here ^ temporary value dropped here while still borrowed
let x = line.as_ref().unwrap().split(",").collect::<Vec<_>>();
Há também
split_whitespace()
fonte