QString拆分

时间:2012-08-01 02:11:58

标签: qt qt4 split qstring

我有这些网址字符串

文件:///home/we/Pictures/neededWord/3193_n.jpg

文件:///home/smes/Pictures/neededWord/jds_22.png

文件:///home/seede/kkske/Pictures/neededWord/3193_n.jpg

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

4 个答案:

答案 0 :(得分:34)

嗯,你只需要倒数第二个元素:

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

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

答案 1 :(得分:0)

我这样解决了:

QStringList splitted = info.url().prettyUrl().split("/");
*header   = splitted.at(splitted.findIndex(splitted.last()) - 1);

答案 2 :(得分: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”应该在needWord QString中。 Regexp模式可以以更优雅的方式进行改进和编写,但我讨厌编写那些:)即使它们非常有用!

答案 3 :(得分:0)

我会将QString::lastIndexOf()QString::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);