2012-08-01 14 views
15

ho queste stringhe URLQString Splitting

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

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

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

voglio estrarre il "neededWord" da ciascuno di essi. Come appare da loro, il nome dell'immagine è sempre dopo la "necessaria" e la parte che cambia nella stringa è prima della "necessaria". Il modo in cui ho pensato è quello di dividere la stringa usando il separatore "/" da destra e prendere il secondo elemento nel risultato QstringList. Quindi, come dividere da destra, o c'è un modo migliore per farlo?

risposta

29

Beh, sarebbe solo prendere la seconda a ultimo elemento:

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

In alternativa, è possibile utilizzare un'espressione regolare.

0

ho risolto in questo modo:

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

Perché è necessario cercare l'ultimo elemento? Sai qual è l'indice è già allo stesso modo in cui sai che il primo elemento è all'indice 0. Questo è un ** modo molto ** strano di fare qualcosa di così semplice. – Chris

0

O qualcosa di simile dalla parte superiore della testa (non testato):

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" dovrebbe essere in neededWord QString. Il pattern Regexp può essere raffinato e scritto in modo più elegante, ma odio scriverlo :) anche se sono super utili!

+0

Sta cercando di catturare il testo che è al posto di "neededWord", non il nome effettivo dell'immagine. – Chris

+0

Oops, il mio male allora :) risolto. Dovrei leggere più attento! Grazie. – sadjoker