/// the prefix is removed. Unlike `trim_start_matches`, this method removes the prefix exactly
/// once.
///
- /// If the string does not start with `prefix`, it is removed.
+ /// If the string does not start with `prefix`, `None` is returned.
///
/// # Examples
///
pub fn strip_prefix<'a, P: Pattern<'a>>(&'a self, prefix: P) -> Option<&'a str> {
let mut matcher = prefix.into_searcher(self);
if let SearchStep::Match(start, len) = matcher.next() {
- debug_assert_eq!(start, 0);
+ debug_assert_eq!(start, 0, "The first search step from Searcher must start from the front");
unsafe {
+ // Searcher is known to return valid indices.
Some(self.get_unchecked(len..))
}
} else {
/// Returns a string slice with the suffix removed.
///
- /// If the string starts with the pattern `suffix`, `Some` is returned with the substring where
+ /// If the string ends with the pattern `suffix`, `Some` is returned with the substring where
/// the suffix is removed. Unlike `trim_end_matches`, this method removes the suffix exactly
/// once.
///
- /// If the string does not start with `suffix`, it is removed.
+ /// If the string does not end with `suffix`, `None` is returned.
///
/// # Examples
///
{
let mut matcher = suffix.into_searcher(self);
if let SearchStep::Match(start, end) = matcher.next_back() {
- debug_assert_eq!(end, self.len());
+ debug_assert_eq!(end, self.len(), "The first search step from ReverseSearcher must include the last character");
unsafe {
+ // Searcher is known to return valid indices.
Some(self.get_unchecked(..start))
}
} else {