Из документации не понятно. В Java вы можете использовать split
метод следующим образом:
"some string 123 ffd".split("123");
Из документации не понятно. В Java вы можете использовать split
метод следующим образом:
"some string 123 ffd".split("123");
Split
и установить его в массив. Конечно, это означает, что количество элементов в каждом разбиении должно быть одинаковым, так как массивы имеют фиксированный размер, и вы должны иметь определенный ранее массив. Я полагаю, что это может быть больше проблем, чем просто созданиеVec
.Ответы:
использование
split()
Это дает итератор, который вы можете зациклить, или
collect()
в вектор.источник
.collect::<Vec<_>>()
.let split
?split.len()
не существует.count()
.len()
только для итераторов, которые знают их точный размер без необходимости использования,count()
потребляет итератор.error: cannot borrow immutable local variable
split `as mutable`let mut split
, извините.Есть три простых способа:
По разделителю :
По пробельному :
По новым строкам :
Результатом каждого вида является итератор:
источник
Есть специальный метод
split
для структурыString
:Разделить на символы:
Разделить на строку:
Разделить по закрытию:
источник
split
возвращаетIterator
, который можно преобразовать вVec
использованииcollect
:split_line.collect::<Vec<_>>()
. Прохождение итератора вместоVec
непосредственного возврата имеет несколько преимуществ:split
ленивый Это означает, что он не будет разбивать линию, пока вам это не понадобится. Таким образом, не будет тратить время на разделение всей строки, если вам нужны только первые несколько значений:split_line.take(2).collect::<Vec<_>>()
или даже если вам нужно только первое значение, которое можно преобразовать в целое число:split_line.filter_map(|x| x.parse::<i32>().ok()).next()
. Этот последний пример не будет тратить время на попытку обработки «23.0», но немедленно остановит обработку, как только найдет «1».split
не делает никаких предположений о том, как вы хотите сохранить результат. Вы можете использовать aVec
, но вы также можете использовать все, что реализуетFromIterator<&str>
, например aLinkedList
или aVecDeque
, или любой пользовательский тип, который реализуетFromIterator<&str>
.источник
let x = line.unwrap().split(",").collect::<Vec<_>>();
не работает, если он не разделен на две отдельные строки:let x = line.unwrap();
иlet x = x.split(",").collect::<Vec<_>>();
? Сообщение об ошибке гласит:temporary value created here ^ temporary value dropped here while still borrowed
let x = line.as_ref().unwrap().split(",").collect::<Vec<_>>();
Есть также
split_whitespace()
источник