Rust - как разбить строку по разделителю и взять только значение после 2 разделителя?

Рейтинг: 0Ответов: 1Опубликовано: 30.03.2023

Необходимо читать строку из файла (это понятно как), разбивать ее по разделителю и вывести только значения после 2 разделителя. Можно ли это реализовать через split?

let _contents = fs::read_to_string(fname).expect("Should have been able to read the file");
let parts = _contents.split(",");

Ответы

▲ 6Принят

Не совсем очевидная постановка, но вот вам варианты.

  • Если нужен третий элемент-подстрока, то после разделения берем нужный элемент последовательности с помощью nth:
let input = "some,line,of,text,with,delimiters".to_string();

let third_element: &str = input.split(",").nth(2).expect("...");

println!("{third_element}"); // -> "of"
  • Если нужны значения-подстроки начиная с третьей (без разделителей), то пропускаем первые две методом skip, остальные можем собрать, например, в вектор:
let input = "some,line,of,text,with,delimiters".to_string();

let rest_elements: Vec<&str> = input.split(",").skip(2).collect();

for element in rest_elements {
    print!("{element}");  // -> "oftextwithdelimiters"
}
  • Если нужна подстрока из остатка текста после второго разделителя (включая остальные разделители), то делим входную строку на три части splitn, где первые две - по разделителю и остаток - уходит в третью, заключительную, которую можно извлечь с помощью last:
let input = "some,line,of,text,with,delimiters".to_string();

const PARTS_COUNT: usize = 3;
let rest_substring: &str = input.splitn(PARTS_COUNT, ",").last().expect("...");

println!("{rest_substring}"); // -> "of,text,with,delimiters"