use std::str::FromStr;
pub fn str_2_vec<T: FromStr + Default>(str: &str, spl: &str) -> Vec<T> {
let mut vec = vec![];
if !str.is_empty() {
let collect: Vec<&str> = str.split(spl).collect();
for ele in collect {
vec.push(ele.parse().unwrap_or_default());
}
}
vec
}
pub fn cut<'a>(s: &'a str, spl: &'a str) -> (&'a str, &'a str, bool) {
match s.find(spl) {
Some(idx) => (&s[..idx], &s[idx + spl.len()..], true),
None => (s, "", false),
}
}
pub fn trim_all(s: &str) -> String {
let mut in_sp = false;
let mut ret = String::new();
for c in s.chars() {
if c == ' ' {
if in_sp {
continue;
}
in_sp = true;
} else {
in_sp = false;
}
ret.push(c);
}
let trim = ret.trim();
trim.to_string()
}
pub fn cut_end<'a>(s: &'a str, spl: &'a char) -> (&'a str, &'a str, bool) {
let mut idx = 0usize;
let len = s.len();
let rev = s.chars().rev();
let mut find = false;
for ele in rev {
if ele.eq(spl) {
find = true;
break;
}
idx += 1;
}
(&s[0..(len - idx - 1)], &s[len - idx..len], find)
}
#[test]
fn test() {
let s = " a b c ";
let trim_all = trim_all(s);
println!("{trim_all}")
}