2012-08-01 18 views
15

ich diese URL-StringsQString Splitting

Datei haben: ///home/we/Pictures/neededWord/3193_n.jpg

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

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

ich die "neededWord" von jedem von ihnen extrahieren möchten. Wie es von ihnen erscheint, ist der Name des Bildes immer nach dem "needWord" und der sich ändernde Teil in der Zeichenkette ist vor dem "needWord". Die Art und Weise, wie ich dachte, ist, die Zeichenfolge mit dem Trennzeichen "/" von rechts zu teilen und das zweite Element in der resultierenden QstringList zu übernehmen. Wie kann man sich von rechts trennen, oder gibt es einen besseren Weg, das zu tun?

Antwort

29

Nun, Sie würde nur das vorletzte Element:

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

Alternativ Sie einen regulären Ausdruck verwenden könnte.

0

ich es auf diese Weise festgelegt:

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

Warum müssen Sie nach dem letzten Artikel suchen? Sie wissen, was es Index ist, ist die gleiche Weise, auf der Sie wissen, dass das erste Element bei Index 0 ist. Dies ist eine sehr seltsame Art, etwas so Einfaches zu tun. – Chris

0

Oder so etwas wie dies aus der Spitze von meinem Kopf (nicht getestet):

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" in neededWord sein sollte QString. Regexp-Muster können verfeinert und auf eine elegantere Art geschrieben werden, aber ich hasse es, diese zu schreiben, auch wenn sie sehr nützlich sind!

+0

Er versucht, den Text einzufangen, der an Stelle von "needsWord" steht, nicht der tatsächliche Name des Bildes. – Chris

+0

Hoppla, mein schlechtes dann :) reparierte es. Ich sollte vorsichtiger lesen! Danke. – sadjoker