23

我有这些 url 字符串

file:///home/we/Pictures/neededWord/3193_n.jpg

file:///home/smes/Pictures/neededWord/jds_22.png

file:///home/seede/kkske/Pictures/neededWord/3193_n.jpg

我想从它们中提取“neededWord”。从他们看来,图像的名称总是在“neededWord”之后,而字符串中的变化部分在“neededWord”之前。我想到的方法是使用“/”分隔符从右侧拆分字符串,并在结果 QstringList 中获取第二个元素。那么如何从右边分裂,或者有更好的方法吗?

4

4 回答 4

44

好吧,您只需要倒数第二个元素:

QStringList pieces = url.split( "/" );
QString neededWord = pieces.value( pieces.length() - 2 );

或者,您可以使用正则表达式。

于 2012-08-01T03:37:26.110 回答
1

我这样修复它:

QStringList splitted = info.url().prettyUrl().split("/");
*header   = splitted.at(splitted.findIndex(splitted.last()) - 1);
于 2012-08-01T05:13:21.067 回答
1

我会使用QString::lastIndexOf()withQString::mid()来防止不必要的 QString / QStringList 创建和销毁:

// Example:
//  0         1         2         3         4         5
//  012345678901234567890123456789012345678901234567890
// "file:///home/we/Pictures/neededWord/3193_n.jpg"

QString neededWord;
int const lastSlash = url.lastIndexOf('/'); // := 35
int const prevSlash = url.lastIndexOf('/', -lastSlash - 1); // := 24
if(lastSlash > prevSlash + 1 && prevSlash >= 0) {
    neededWord = url.mid(prevSlash, lastSlash - prevSlash - 1); // len := 10
}

根据您的需要,您可以使用QStringRef进一步优化它:

QStringRef neededWordRef(&url, prevSlash, lastSlash - prevSlash - 1);
于 2018-05-30T14:20:35.250 回答
0

或者像这样从我的头顶(未测试):

QString neededWord = "";
QString str = "file:///home/seede/kkske/Pictures/neededWord/3193_n.jpg";
QRegExp rx(".*Pictures\\/(\\w+)\\/.*(?:jpg|png|gif|bmp|tiff)");
rx.setMinimal(false);
rx.setCaseSensitivity(Qt::CaseSensitive) // or use Qt::CaseInsensitive
if (rx.indexIn(str) != -1) {
     neededWord = rx.cap(1);
 }

“neededWord”应该在neededWord QString 中。正则表达式模式可以以更优雅的方式进行改进和编写,但我讨厌写那些:)即使它们非常有用!

于 2012-08-02T12:50:54.257 回答