@@ -534,9 +534,8 @@ pub struct NumericPrefixWithSuffix<'a>(i32, &'a str);
impl<'a> NumericPrefixWithSuffix<'a> {
pub fn from_numeric_prefixed_str(str: &'a str) -> Option<Self> {
- let mut chars = str.chars();
- let prefix: String = chars.by_ref().take_while(|c| c.is_ascii_digit()).collect();
- let remainder = chars.as_str();
+ let i = str.chars().take_while(|c| c.is_ascii_digit()).count();
+ let (prefix, remainder) = str.split_at(i);
match prefix.parse::<i32>() {
Ok(prefix) => Some(NumericPrefixWithSuffix(prefix, remainder)),
@@ -617,6 +616,33 @@ mod tests {
assert_eq!(truncate_and_trailoff("รจรจรจรจรจรจ", 5), "รจรจรจรจรจโฆ");
}
+ #[test]
+ fn test_numeric_prefix_str_method() {
+ let target = "1a";
+ assert_eq!(
+ NumericPrefixWithSuffix::from_numeric_prefixed_str(target),
+ Some(NumericPrefixWithSuffix(1, "a"))
+ );
+
+ let target = "12ab";
+ assert_eq!(
+ NumericPrefixWithSuffix::from_numeric_prefixed_str(target),
+ Some(NumericPrefixWithSuffix(12, "ab"))
+ );
+
+ let target = "12_ab";
+ assert_eq!(
+ NumericPrefixWithSuffix::from_numeric_prefixed_str(target),
+ Some(NumericPrefixWithSuffix(12, "_ab"))
+ );
+
+ let target = "1_2ab";
+ assert_eq!(
+ NumericPrefixWithSuffix::from_numeric_prefixed_str(target),
+ Some(NumericPrefixWithSuffix(1, "_2ab"))
+ );
+ }
+
#[test]
fn test_numeric_prefix_with_suffix() {
let mut sorted = vec!["1-abc", "10", "11def", "2", "21-abc"];