提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 分三种场景逐一分析
- 1. 场景1:ptNum 中没有 "."(如 ptNum = "2")
- 2. 场景2:ptNum 中有一个 "."(如 ptNum = "2.3")
- 3. 场景3:ptNum 以 "." 结尾(如 ptNum = "2.")
- 补充:如何控制空字符串的保留/过滤?
- 总结表格
QStringList list = ptNum.split(“.”);
如果ptnum中有一个.返回的list.size为2,如果没有返回是1吗,如果ptnum="2."又是什么情况呢
要搞清楚QString::split(".")的结果,核心是理解它的默认行为规则:split会按分隔符拆分字符串,默认保留空字符串结果(不自动过滤),且拆分后列表的长度 = 分隔符出现次数 + 1(特殊情况除外,但默认模式下基本遵循此规律)。
分三种场景逐一分析
假设你的代码中ptNum是QString类型(结合上下文推测),三种情况的结果如下:
1. 场景1:ptNum 中没有 “.”(如 ptNum = “2”)
- 分隔符 “.” 出现次数 = 0;
- 拆分后列表长度 = 0 + 1 = 1;
list内容:["2"];- 结论:
list.size() = 1(和你猜测的一致)。
2. 场景2:ptNum 中有一个 “.”(如 ptNum = “2.3”)
- 分隔符 “.” 出现次数 = 1;
- 拆分后列表长度 = 1 + 1 = 2;
list内容:["2", "3"];- 结论:
list.size() = 2(和你描述的一致)。
3. 场景3:ptNum 以 “.” 结尾(如 ptNum = “2.”)
- 分隔符 “.” 出现次数 = 1;
- 拆分后会保留末尾的空字符串(默认模式);
list内容:["2", ""](第一个元素是 “.” 前的非空字符串,第二个元素是 “.” 后的空字符串);- 结论:
list.size() = 2(关键!不是 1,因为默认不过滤空结果)。
补充:如何控制空字符串的保留/过滤?
QString::split有一个重载参数QString::SplitBehavior,可以自定义拆分规则:
// 1. 默认模式(保留空字符串,你的代码用的是这种)QStringList list1=ptNum.split(".");// 等价于:split(".", QString::KeepEmptyParts)// 2. 过滤所有空字符串(包括开头、中间、结尾)QStringList list2=ptNum.split(".",QString::SkipEmptyParts);// 举例:ptNum = "2." 时list1 →["2",""]→ size=2list2 →["2"]→ size=1总结表格
| ptNum 值 | split(“.”) 结果(默认) | list.size() | split(“.”, SkipEmptyParts) 结果 |
|---|---|---|---|
| “2” | [“2”] | 1 | [“2”] |
| “2.3” | [“2”, “3”] | 2 | [“2”, “3”] |
| “2.” | [“2”, “”] | 2 | [“2”] |
| “.3” | [“”, “3”] | 2 | [“3”] |
| “2…3” | [“2”, “”, “3”] | 3 | [“2”, “3”] |
| “”(空串) | [“”] | 1 | [](空列表,size=0) |
核心记住:默认情况下,split 不会丢弃任何拆分结果(包括空字符串),列表长度 = 分隔符数量 + 1;如果需要过滤空值,必须显式传入QString::SkipEmptyParts参数。