let s = "☄☃🤔"; // also works with non-ASCII characters
let mut part1 = "some string ☄☃🤔 ffd".to_string();
let _t;
let part2;
if let Some(idx) = part1.find(s) {
part2 = part1.split_off(idx + s.len());
_t = part1.split_off(idx);
}
else {
part2 = "".to_string();
}
7条答案
按热度按时间bvjxkvbb1#
如果您正在寻找Python风格的分割,即对分割字符串的两端进行元组解包,则可以执行以下操作
wnvonmuf2#
使用
split()
这给出了一个迭代器,你可以循环使用它,或者将
collect()
转换成一个向量。ffscu2ro3#
有三种简单的方法:
1.按分隔符:
1.按空格:
1.通过换行:
1.通过正则表达式:* (使用
regex
板条箱)*每种类型的结果都是一个迭代器:
2g32fytz4#
结构
String
有一个特殊的方法split
:按字符拆分:
按字符串拆分:
按闭合拆分:
6ss1mwsb5#
split
返回一个Iterator
,可以使用collect
将其转换为Vec
:split_line.collect::<Vec<_>>()
。通过迭代器而不是直接返回Vec
有几个优点:split
是懒惰的,这意味着它不会真正地拆分行,直到你需要它。这样,如果你只需要前几个值,它就不会浪费时间拆分整个字符串:split_line.take(2).collect::<Vec<_>>()
,或者即使您只需要第一个可以转换为整数的值:最后一个例子不会浪费时间试图处理“23.0”,而是一旦发现“1”就立即停止处理。split
对结果的存储方式没有任何假设。您可以使用Vec
,但也可以使用任何实现FromIterator<&str>
的类型,例如LinkedList
或VecDeque
,或者任何实现FromIterator<&str>
的自定义类型。6ss1mwsb6#
还有
split_whitespace()
yjghlzjz7#
OP的问题是如何拆分多字符串,这里有一种方法可以将
part1
和part2
的结果作为String
s,而不是在vector
中。此处使用非ASCII字符串
"☄☃🤔"
代替"123"
进行拆分:获取:
part1 = "some string "
part2 = " ffd"
如果没有找到
"☄☃🤔"
,则part1
包含未被触及的原始String
,并且part2
为空。下面是罗塞塔代码中的一个很好的例子- * 根据字符的变化拆分字符串 * -说明如何使用
split_off
来转换一个简短的解决方案:变成那样