如何根据 empty/blank 行拆分字符串?
How to split a string based on empty/blank lines?
我正在编写一个应该解析 .srt 字幕文件的 C++ 应用程序 (Qt Widgets)。文件的每一部分由一个空行分隔,像这样:
1
00:00:08,000 --> 00:00:11,000
[Line]
2
00:00:56,034 --> 00:00:57,492
[Line]
[Another line]
3
00:01:13,676 --> 00:01:15,420
[Line]
基本上,我想将整个文件读入 QString
,然后用空行将其拆分为 QString
数组,每个项目包含如下部分之一:
2
00:00:56,034 --> 00:00:57,492
[Line]
[Another line]
但是,我不知道该怎么做。我尝试按 \r
和 \n
拆分字符串,但将所有内容拆分为单独的行,而不是空行。
这是我想到的从 .srt 文件中获取数据的例程:
- 将文件的所有内容读取到
QString
(按照 content
命名)。
- 用空行拆分
QString
,并附加到 QStringList
(按照 sections
命名)。
- 对于
sections
中的每一项,将第二行按 -->
标识符拆分,并分配索引 0 和 1 到 QString
变量分别称为 startTime
和 endTime
。
- 取出其余的行(第 2 行之后的所有内容都是字幕文本),并将它们附加到名为
subtitleText
. 的 QString
- 将收集到的所有信息添加到一个
SrtSubtitle
实例中,并将其附加到 QList<SrtSubtitle>
我怎样才能做到这一点?
新行通常表示为\n
。
当有 2 个新行且它们之间没有任何内容时要拆分字符串,您可以使用 \n\n
作为分隔符。
我会改进 ziarra 的回答。您当然希望解决方案稳健并且还可以使用 Windows 行结尾,即 "\r\n"
而不是 "\n"
。在那种情况下,ziarra 的解决方案是不够的。
所以我的建议是分两步进行:
- 将所有出现的
"\r\n"
替换为 "\n"
- 将文本拆分为
"\n\n"
(如 ziarra 建议的那样)
我正在编写一个应该解析 .srt 字幕文件的 C++ 应用程序 (Qt Widgets)。文件的每一部分由一个空行分隔,像这样:
1
00:00:08,000 --> 00:00:11,000
[Line]
2
00:00:56,034 --> 00:00:57,492
[Line]
[Another line]
3
00:01:13,676 --> 00:01:15,420
[Line]
基本上,我想将整个文件读入 QString
,然后用空行将其拆分为 QString
数组,每个项目包含如下部分之一:
2
00:00:56,034 --> 00:00:57,492
[Line]
[Another line]
但是,我不知道该怎么做。我尝试按 \r
和 \n
拆分字符串,但将所有内容拆分为单独的行,而不是空行。
这是我想到的从 .srt 文件中获取数据的例程:
- 将文件的所有内容读取到
QString
(按照content
命名)。 - 用空行拆分
QString
,并附加到QStringList
(按照sections
命名)。 - 对于
sections
中的每一项,将第二行按-->
标识符拆分,并分配索引 0 和 1 到QString
变量分别称为startTime
和endTime
。 - 取出其余的行(第 2 行之后的所有内容都是字幕文本),并将它们附加到名为
subtitleText
. 的 - 将收集到的所有信息添加到一个
SrtSubtitle
实例中,并将其附加到QList<SrtSubtitle>
QString
我怎样才能做到这一点?
新行通常表示为\n
。
当有 2 个新行且它们之间没有任何内容时要拆分字符串,您可以使用 \n\n
作为分隔符。
我会改进 ziarra 的回答。您当然希望解决方案稳健并且还可以使用 Windows 行结尾,即 "\r\n"
而不是 "\n"
。在那种情况下,ziarra 的解决方案是不够的。
所以我的建议是分两步进行:
- 将所有出现的
"\r\n"
替换为"\n"
- 将文本拆分为
"\n\n"
(如 ziarra 建议的那样)