lets=String::from("Hello World!");letword=first_word(&s);println!("The first word is: {}",word);}fnfirst_word(s: &String)-> &str{// передача строки по ссылке
letword_count=s.as_bytes();for(i,&item)inword_count.iter().enumerate(){ifitem==b' '{return&s[..i];// возврат части строки как &str
}}&s[..]// обязательно указать возвращаемое значение, если условие в цикле выше ничего не вернёт (например, строка не содержит пробелов = вернуть всю строку)
‘Проход’ по строке итератором
Можно пройти по строке итератором chars() и его методами взятия N-го символа nth() спереди или nth_back() сзади:
letperson_name=String::from("Alice");println!("The last character of string is: {}",matchperson_name.chars().nth_back(0){// ищем 1-ый символ с конца строки
Some(i)=>i.to_string(),// если находим - превращаем в строку
None=>"Nothing found!".to_string(),// не находим = сообщаем
});
matches() и rmatches(),
Возвращают итератор с теми частями строки, которые совпадают с заданным шаблоном:
Возвращает Option<байт индекс 1го символа в строке слева-направо>, совпадающий с шаблоном. Либо возвращает None, если символ отсутствует в строке. rfind
fnduplicate_encode2(word: &str)-> String{lets=String::from(word).to_lowercase();s.chars().map(|c|ifs.find(c)==s.rfind(c){'('}else{')'}).collect()}// если у символа есть дубли => замена на '(',
// иначе на ')'
fnmain(){println!("{}",duplicate_encode("rEcede"));}
Use split(' '), filter out empty entries then re-join by space:
s.trim().split(' ').filter(|s|!s.is_empty()).collect::<Vec<_>>().join(" ")// Using itertools:
useitertools::Itertools;s.trim().split(' ').filter(|s|!s.is_empty()).join(" ")// Using split_whitespace, allocating a vector & string
pubfntrim_whitespace_v1(s: &str)-> String{letwords: Vec<_>=s.split_whitespace().collect();words.join(" ")}
Озаглавить каждое слово в предложении
В заданной фразе озаглавить каждое слово. Если результат больше 140 символов или пустой, вернуть None:
fncapitalize_first_letter(s: &str)-> Option<String>{letres=s.split_whitespace().map(capital)// каждое слово передать в функцию capital()
.collect::<Vec<String>>()// собрать в вектор
.join(" ");// потому что вектор можно собрать в string с join()
ifres.len()<141||!res.is_empty(){// проверка длины
Some(res)}else{None}}fncapital(word: &str)-> String{letmutlword=word.to_ascii_lowercase();// изменить НА МЕСТЕ - прямо в этой строке (быстрее всего):
lword[0..1].make_ascii_uppercase();lword// вернуть итоговую строку
}