D'après la documentation , ce n'est pas clair. En Java, vous pouvez utiliser la split
méthode comme ceci:
"some string 123 ffd".split("123");
D'après la documentation , ce n'est pas clair. En Java, vous pouvez utiliser la split
méthode comme ceci:
"some string 123 ffd".split("123");
Split
et le définir dans le tableau. Bien sûr, cela signifie que le nombre d'éléments dans chaque division doit être le même puisque les tableaux sont de taille fixe et que vous devez avoir défini le tableau avant. J'imagine que cela peut être plus difficile que de simplement créer un fichierVec
.Réponses:
Utilisation
split()
Cela donne un itérateur sur lequel vous pouvez faire une boucle ou
collect()
dans un vecteur.la source
.collect::<Vec<_>>()
.let split
?split.len()
n'existe pas..count()
.len()
est uniquement pour les itérateurs qui connaissent leur taille exacte sans avoir besoin d'être consommés,count()
consomme l'itérateur.error: cannot borrow immutable local variable
split` as mutable`let mut split
, désolé.Il existe trois moyens simples:
Par séparateur :
Par espace :
Par nouvelles lignes :
Le résultat de chaque type est un itérateur:
la source
Il existe une méthode spéciale
split
pour structString
:Divisé par caractère:
Split par chaîne:
Fractionnement par fermeture:
la source
split
retourne unIterator
, que vous pouvez convertir enVec
utilisantcollect
:split_line.collect::<Vec<_>>()
. Passer par un itérateur au lieu de renvoyerVec
directement un a plusieurs avantages:split
est paresseux. Cela signifie qu'il ne divisera pas vraiment la ligne tant que vous n'en aurez pas besoin. De cette façon, vous ne perdrez pas de temps à diviser la chaîne entière si vous n'avez besoin que des premières valeurs:,split_line.take(2).collect::<Vec<_>>()
ou même si vous n'avez besoin que de la première valeur qui peut être convertie en entier:split_line.filter_map(|x| x.parse::<i32>().ok()).next()
. Ce dernier exemple ne perdra pas de temps à essayer de traiter le "23.0" mais arrêtera le traitement immédiatement une fois qu'il aura trouvé le "1".split
ne fait aucune hypothèse sur la manière dont vous souhaitez stocker le résultat. Vous pouvez utiliser aVec
, mais vous pouvez également utiliser tout ce qui implémenteFromIterator<&str>
, par exemple aLinkedList
ou aVecDeque
, ou tout type personnalisé implémentantFromIterator<&str>
.la source
let x = line.unwrap().split(",").collect::<Vec<_>>();
ne fonctionne pas à moins qu'elle ne soit séparée en deux lignes distinctes:let x = line.unwrap();
etlet x = x.split(",").collect::<Vec<_>>();
? Le message d'erreur dit:temporary value created here ^ temporary value dropped here while still borrowed
let x = line.as_ref().unwrap().split(",").collect::<Vec<_>>();
Il y a aussi
split_whitespace()
la source