self.len() == 0
}
+ /// Divide one string into two at an index.
+ ///
+ /// The argument, `mid`, should be a byte offset from the start of the string. It must also
+ /// be on the boundary of a UTF-8 code point.
+ ///
+ /// The two strings returned go from the start of the string to `mid`, and from `mid` to the end
+ /// of the string.
+ ///
+ /// # Panics
+ ///
+ /// Panics if `mid` is not on a `UTF-8` code point boundary, or if it is beyond the last
+ /// code point of the string.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// # #![feature(string_split_off)]
+ /// # fn main() {
+ /// let mut hello = String::from("Hello, World!");
+ /// let world = hello.split_off(7);
+ /// assert_eq!(hello, "Hello, ");
+ /// assert_eq!(world, "World!");
+ /// # }
+ /// ```
+ #[inline]
+ #[unstable(feature = "string_split_off", issue = "38080")]
+ pub fn split_off(&mut self, mid: usize) -> String {
+ assert!(self.is_char_boundary(mid));
+ assert!(mid <= self.len());
+ let other = self.vec.split_off(mid);
+ unsafe { String::from_utf8_unchecked(other) }
+ }
+
/// Truncates this `String`, removing all contents.
///
/// While this means the `String` will have a length of zero, it does not
assert_eq!(data, "ประเทศไทย中");
}
+#[test]
+fn test_split_off_empty() {
+ let orig = "Hello, world!";
+ let mut split = String::from(orig);
+ let empty: String = split.split_off(orig.len());
+ assert!(empty.is_empty());
+}
+
+#[test]
+#[should_panic]
+fn test_split_off_past_end() {
+ let orig = "Hello, world!";
+ let mut split = String::from(orig);
+ split.split_off(orig.len() + 1);
+}
+
+#[test]
+#[should_panic]
+fn test_split_off_mid_char() {
+ let mut orig = String::from("山");
+ orig.split_off(1);
+}
+
+#[test]
+fn test_split_off_ascii() {
+ let mut ab = String::from("ABCD");
+ let cd = ab.split_off(2);
+ assert_eq!(ab, "AB");
+ assert_eq!(cd, "CD");
+}
+
+#[test]
+fn test_split_off_unicode() {
+ let mut nihon = String::from("日本語");
+ let go = nihon.split_off("日本".len());
+ assert_eq!(nihon, "日本");
+ assert_eq!(go, "語");
+}
+
#[test]
fn test_str_truncate() {
let mut s = String::from("12345");