qstringlist qt qt4 split qstring

qt - qstringlist - QString Splitting



qstring to string (4)

Tengo estas cadenas de url

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

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

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

Quiero extraer la "palabra necesaria" de cada uno de ellos. Como se ve en ellos, el nombre de la imagen siempre está después de "neededWord" y la parte cambiante en la cadena está antes de "neededWord". La forma en que pensé es dividir la cadena usando el separador "/" de la derecha y tomar el segundo elemento en la QstringList resultante. Entonces, ¿cómo dividir de la derecha, o hay una mejor manera de hacerlo?


Bueno, solo tomarías el segundo al último elemento:

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

Alternativamente, podrías usar una expresión regular.


Lo arreglé de esta manera:

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


O algo así desde la parte superior de mi cabeza (no probado):

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" debe estar en neededWord QString. El patrón Regexp puede ser refinado y escrito de una manera más elegante, pero odio escribir esos :) incluso si son súper útiles.


QString::lastIndexOf() junto con QString::mid() para evitar la creación y destrucción innecesarias de 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 }

Dependiendo de sus necesidades, puede optimizar esto aún más utilizando un QStringRef :

QStringRef neededWordRef(&url, prevSlash, lastSlash - prevSlash - 1);