Tip of the Week 10 分割字符串,不必拘小节
将字符串分割为子串是任何通用编程语言的常见操作,C++也不例外。这个需求出现在Google的时候,很多工程师发现他(她)们掉进了一堆(且不断增加的)“分割函数”填成的泥沼。你必须搜索那个输入参数、输出参数和语义都满足你要求的函数。在考察过600多行的头文件理的里的50多个函数之后,你也许会最终决定使用一个命名拐弯抹角的函数:
SplitStringViewToDequeueIfStringAllowEmpty()
。
为了解决这个麻烦,C++库团队实现了一个新的API来分割字符串,放在了absl/strings/str_split.h
里。
这个新的API用一个absl::StrSplit()
函数取代了所有类似的分割函数。absl::StrSplit()
接受一个准备被分割的字符串和一个分割符参数。其返回的子串集合可以自动适配为调用者接受的容器类型。absl::StrSplit()
的内部实现使用absl::string_view
,因此非常高效。除非调用者显式要求将结果存储为字符串对象集合,否则字符串内容不会被复制。
来看下下面的例子,比较直截了当:
1 | // 用逗号分割。结果存储为vector<string_view>(没有字符串内容的复制)。 |
本期字数较少,更多信息请参阅absl/strings/str_split.h获取API的使用方法,参阅absl/strings/str_split_test.cc获取更多示例。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我是Android开发者!